我们在产品代码中有一些使用@Transaction(propagation = REQUIRES_NEW)注释的方法。因此,使用@Transactional/@Rollback注释测试类仍然会导致数据库受到污染。我想有一个方法,可以删除相关表中的记录时,这个类的所有测试都已完成。然而,Spring是静态的,那么我如何访问我的@AfterClass提供的EntityManager和/或Spring数据存储库。我们目前使用的解决方案是使用@DirtiesContext(mode=AFTER_CLASS)注释测试类,但是,如果您忘记覆盖此测试类的数据源URL,则会导致非常痛苦的体验。
那么,这可以通过更惯用的Spring/JUnit方式来实现吗?
发布于 2019-03-10 02:40:07
我有一个针对QA环境运行的回归套件。由于它执行应用程序,因此本质上它会修改数据库。对于这些测试,我有特定的测试用户,每个测试都会创建它所依赖的任何记录。在此设置和测试执行期间,将在本地集合中跟踪任何创建的数据库记录。在测试结束时,即在cleanUp方法期间,记录将从数据库中删除。我还使用了名称和测试运行标识符,以便在出现任何清理问题时轻松地将这些记录与实际数据区分开来。我不确定这是否符合您的惯用Spring/JUnit的想法,但这对我们来说是有效的,并保持我们的QA环境数据相当干净。
https://stackoverflow.com/questions/55080457
复制相似问题