如何使用JUnit和SpringRunner运行非静态的后测

时间:2019-03-09 18:11:33

标签: spring junit integration-testing

我们在生产代码中有一些用@Transaction(propagation = REQUIRES_NEW)注释的方法。因此,用@Transactional / @Rollback注释测试类仍然会导致数据库污染。我想要一个可以在此类的所有测试都已完成时从相关表中删除记录的方法。但是,@AfterClass方法必然是静态的,因此如何访问Spring提供的EntityManager和/或Spring Data存储库。目前,我们使用的解决方案是使用@DirtiesContext(mode=AFTER_CLASS)注释测试类,但是如果您忘记也重写该测试类的数据源URL,则会导致非常痛苦的体验。

那么,这可以通过更惯用的Spring / JUnit方式实现吗?

1 个答案:

答案 0 :(得分:0)

我有一个针对QA环境运行的回归套件。由于它本身就是应用程序,因此可以修改数据库。对于这些测试,我有特定的测试用户,每个测试都会创建它依赖的任何记录。在此设置和测试执行期间,将在本地集合中跟踪所有创建的数据库记录。在测试结束时,即在cleanUp方法期间,将从数据库中删除记录。我还使用名称和测试运行标识符,以便在发生任何清理问题时轻松区分这些记录和真实数据。不确定这是否符合您惯用的Spring / JUnit的想法,但这对我们有用,并且可以使我们的QA环境数据保持合理的清洁状态。