我们使用 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
而不是TransactionalTestExecutionListener
并DbUnitTestExecutionListener
没有帮助。
我尝试了它DatabaseOperation.INSERT
而不是默认的,并将@DatabaseSetup
注释移动到测试方法和设置方法上,但没有成功。
我们正在使用以下依赖项。它不是最新的,也是我目前能够升级的最远的:
- com.github.ppodgorsek:spring-test-dbunit-core:5.2.0
- org.dbunit:dbunit:2.6.0
- junit:junit:4.12
- org.springframework.boot:spring-boot-starter-parent:1.3.8.RELEASE
- 开放JDK 1.8
让我感到困惑的是,我找不到任何人抱怨或配置选项,所以我一定遗漏了一些显而易见的东西!