我有一些使用AbstractTransactionalJUnit4SpringContextTests的集成测试。我希望能够在事务期间查看对数据库所做的更改,包括查看数据库(例如,设置了断点)和另一个应用程序。
我正在使用Postgres,DataSourceTransactionManager和直接JDBC。我已经尝试将我的测试的隔离级别设置为未提交的读取:
@Transactional(isolation=Isolation.READ_UNCOMMITTED)
public class MyTestFixture
{
...
}
但它没有任何区别。有什么建议吗?
答案 0 :(得分:1)
出于调试目的和对数据库状态的经验检查,您需要确保客户端配置为READ_UNCOMMITTED
的隔离级别(如果测试代码(或测试的话)应用程序代码)尚未提交其事务)。将测试代码的隔离级别设置为READ_UNCOMMITTED
只会影响测试代码可以看到的内容;它不会影响其他数据库客户端可以看到的内容。
但是,更强大的方法是使用JDBC在测试中查询数据库的状态,然后断言预期的状态。 JdbcTestUtils
提供了使这些测试方案更容易的静态方法,AbstractTransactionalJUnit4SpringContextTests
包含多个protected
方法,以方便使用 - 例如,countRowsInTable
,countRowsInTableWhere
等您可以在Spring Framework Reference Manual的 Testing 章节的PetClinic Example中看到这种测试的示例。除此之外,建议最佳做法是使用Spring的JdbcTemplate
直接在事务集成测试中查询底层数据库的状态。
此致
Sam( Spring TestContext Framework的作者)