Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使Maven集成测试彼此隔离?_Java_Database_Maven_Integration Testing - Fatal编程技术网

Java 如何使Maven集成测试彼此隔离?

Java 如何使Maven集成测试彼此隔离?,java,database,maven,integration-testing,Java,Database,Maven,Integration Testing,我有多个Maven集成测试正在更新数据库的状态,这可能会在这些测试之间产生冲突。我想知道是否有一种方法可以通过利用Maven阶段或任何其他方法来隔离这些集成测试?理想情况下,我希望在每个集成测试类之前都有一种运行数据库迁移的方法。我正在使用Flyway作为我的PostgreSQL数据库的迁移工具,我正在使用JUnit4.12。我正在运行的迁移基本上是用数据创建和填充表以进行测试。Maven的职责是在集成测试阶段逐个运行测试,并在验证阶段检查结果。它还能够准备/关闭环境。检查 测试之间的所有隔离都

我有多个Maven集成测试正在更新数据库的状态,这可能会在这些测试之间产生冲突。我想知道是否有一种方法可以通过利用Maven阶段或任何其他方法来隔离这些集成测试?理想情况下,我希望在每个集成测试类之前都有一种运行数据库迁移的方法。我正在使用Flyway作为我的PostgreSQL数据库的迁移工具,我正在使用JUnit4.12。我正在运行的迁移基本上是用数据创建和填充表以进行测试。

Maven的职责是在集成测试阶段逐个运行测试,并在验证阶段检查结果。它还能够准备/关闭环境。检查

测试之间的所有隔离都是测试框架的责任,您可以使用JUnit、TestNG、Cucumber等。JUnit有@Before和@After注释,让它在每个测试类之前和之后调用方法


然后,这些方法负责在每次测试之前使数据库处于已知状态

我用flyway core解决了这个问题。基本上,我在每个测试类中都做了以下工作:

@BeforeClass
public static void migrateDB(){
    Flyway flyway = Flyway.configure().dataSource(url, user, password).load();
    flyway.clean();
    flyway.migrate();
}

确保使用@Before和@After注释运行数据库迁移脚本的最佳方法是什么?在我看来,数据库迁移脚本应该发生在集成测试开始之前您使用的是框架,对吗?java方法应该只负责将表重置为已知状态。您是否建议也使用Flyway工具来重置java方法中的表?我对Flyway不太熟悉,无法回答这个问题。您可能需要一些可以删除所有行并插入已知测试数据的工具。使用这些测试框架,是否可以在每个集成测试类之前强制运行数据库迁移,以使数据库恢复到已知状态?是的,这些框架中的每一个都有@before。但是,从您使用的测试框架以及希望运行哪种迁移的问题来看,还不清楚,我只能说,这不是maven的责任。我建议你根据你的情况问另一个更详细的问题。对不起,我在问题中添加了更多细节。我使用的是Flyway和JUnit4.12。我正在运行的迁移基本上是用测试数据创建和填充表。