0

我们使用 spring-db-unit 运行我们的测试,它是分叉和维护的一个。测试运行良好,可以访问和修改数据。但是当我调试一些测试时,我意识到数据库一直是空的!我的假设是运行者创建一个事务并在测试结束时将其回滚而不是提交。

如何在测试结束时(或任何时候,真的!)检查数据或将其保存在数据库中?


设置:

我们的配置遵循 gibthub 自述文件中的建议设置:

@TestExecutionListeners(
    inheritListeners = false,
    value = {
        DependencyInjectionTestExecutionListener.class,
        DirtiesContextTestExecutionListener.class,
        TransactionalTestExecutionListener.class,
        DbUnitTestExecutionListener.class,
        WithSecurityContextTestExecutionListener.class
})
@DatabaseSetup(value = "/testdata/dbunit/base_test_dataset.xml", type = DatabaseOperation.CLEAN_INSERT)
@SpringApplicationConfiguration(classes = {
    DBUnitTestConfig.class,
})
@DbUnitConfiguration(databaseConnection = "dbUnitConnection")
public class ReviewServiceTest { 
    @Test
    @WithUserDetails(TEST_COCKPIT_1)
    public void getUserVersionReviews() throws Exception {
        // when in a debug point here, the DB is empty.
    }
}

数据库是 PostgreSQL 11.4。上面的DBUnitTestConfig类只是配置PostgresqlDataTypeFactory了 DatabaseConfigBean

切换到TransactionDbUnitTestExecutionListener而不是TransactionalTestExecutionListenerDbUnitTestExecutionListener没有帮助。

我尝试了它DatabaseOperation.INSERT而不是默认的,并将@DatabaseSetup注释移动到测试方法和设置方法上,但没有成功。

我们正在使用以下依赖项。它不是最新的,也是我目前能够升级的最远的:

  1. com.github.ppodgorsek:spring-test-dbunit-core:5.2.0
  2. org.dbunit:dbunit:2.6.0
  3. junit:junit:4.12
  4. org.springframework.boot:spring-boot-starter-parent:1.3.8.RELEASE
  5. 开放JDK 1.8

让我感到困惑的是,我找不到任何人抱怨或配置选项,所以我一定遗漏了一些显而易见的东西!

4

1 回答 1

0

回滚事务不是 spring-test-dbunit 错误。它可以在有交易和没有交易的情况下工作。回滚是TransactionalTestExecutionListener.

引用类的javadoc:

默认情况下,测试事务会在测试完成后自动回滚;但是,事务提交和回滚行为可以通过@Rollback注释在类级别和方法级别以声明方式进行配置。

解决方案是放在@org.springframework.test.annotation.Rollback(false)测试类或方法上。

于 2020-07-27T08:50:24.117 回答