运行 spring-db-unit 时如何检查数据库

How to inspect database when running with spring-db-unit

我们 运行 我们使用 spring-db-unit,the forked and maintained one 进行测试。 测试 运行 很好,可以访问和修改数据。但是当我调试一些测试时,我意识到数据库一直是空的!我的假设是 运行ner 创建一个事务并在测试结束时将其回滚而不是提交。

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


设置:

我们的配置遵循 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。上面的DBUnitTestConfigclass只是配置了DatabaseConfigBean

PostgresqlDataTypeFactory

切换到 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. OpenJDK 1.8

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

回滚事务不是 spring-test-dbunit 错误。它适用于有和没有交易。回滚是 TransactionalTestExecutionListener.

的默认行为

引用 class 的 javadoc:

By default, test transactions will be automatically rolled back after completion of the test; however, transactional commit and rollback behavior can be configured declaratively via the @Rollback annotation at the class level and at the method level.

解决办法是把@org.springframework.test.annotation.Rollback(false)放在测试class或者方法上