如何使用AbstractTransactionalJUnit4SpringContextTests查看测试期间写入的数据

时间:2014-06-10 06:27:25

标签: spring-test

我有一些使用AbstractTransactionalJUnit4SpringContextTests的集成测试。我希望能够在事务期间查看对数据库所做的更改,包括查看数据库(例如,设置了断点)和另一个应用程序。

我正在使用Postgres,DataSourceTransactionManager和直接JDBC。我已经尝试将我的测试的隔离级别设置为未提交的读取:

@Transactional(isolation=Isolation.READ_UNCOMMITTED)
public class MyTestFixture
{
    ...
}

但它没有任何区别。有什么建议吗?

1 个答案:

答案 0 :(得分:1)

出于调试目的和对数据库状态的经验检查,您需要确保客户端配置为READ_UNCOMMITTED的隔离级别(如果测试代码(或测试的话)应用程序代码)尚未提交其事务)。将测试代码的隔离级别设置为READ_UNCOMMITTED只会影响测试代码可以看到的内容;它不会影响其他数据库客户端可以看到的内容。

但是,更强大的方法是使用JDBC在测试中查询数据库的状态,然后断言预期的状态。 JdbcTestUtils提供了使这些测试方案更容易的静态方法,AbstractTransactionalJUnit4SpringContextTests包含多个protected方法,以方便使用 - 例如,countRowsInTablecountRowsInTableWhere等您可以在Spring Framework Reference Manual的 Testing 章节的PetClinic Example中看到这种测试的示例。除此之外,建议最佳做法是使用Spring的JdbcTemplate直接在事务集成测试中查询底层数据库的状态。

此致

Sam( Spring TestContext Framework的作者