如何使 Maven 集成测试相互隔离?

How to keep Maven integration tests isolated from each other?

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

Maven的职责是运行在integration-tests阶段一一测试,并在验证[=17]检查结果=].它还能够 prepare/shutdown 环境。检查 failsafe plugin

测试之间的所有隔离都是您使用的测试框架(JUnit、TestNG、Cucumber 等)的职责。

Junit 有 @Before@After 注释,让它在每次测试之前和之后调用方法 class。

然后这些方法负责在每次测试之前将数据库置于已知状态。

我使用 flyway-core 解决了这个问题。基本上我最终在每个测试中做了以下 类:

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