运行 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。上面的DBUnitTestConfig
class只是配置了DatabaseConfigBean
的PostgresqlDataTypeFactory
切换到 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
- 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或者方法上
我们 运行 我们使用 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。上面的DBUnitTestConfig
class只是配置了DatabaseConfigBean
PostgresqlDataTypeFactory
切换到 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
- 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或者方法上