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



我有一些使用AbstractTransactionalJUnit4SpringContextTests的集成测试。我希望能够看到在事务期间对数据库所做的更改,既可以通过查看数据库(例如当设置断点时),也可以从另一个应用程序查看。

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

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

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

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

然而,更健壮的方法是使用JDBC在测试中查询数据库的状态,然后断言预期的状态。JdbcTestUtils提供了静态方法,使这些测试场景更容易,AbstractTransactionalJUnit4SpringContextTests包括几个protected方法作为方便——例如,countRowsInTable, countRowsInTableWhere等。您可以在Spring框架参考手册的 testing 一章中的PetClinic示例中看到这种测试的实际示例。除此之外,推荐使用Spring的JdbcTemplate在事务集成测试中直接查询底层数据库的状态。

问候,

Sam (Spring TestContext Framework的作者)

相关内容

  • 没有找到相关文章

最新更新