【问题标题】:how to run non-static after-tests with JUnit and SpringRunner如何使用 JUnit 和 SpringRunner 运行非静态后测
【发布时间】:2019-03-09 18:11:32
【问题描述】:

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

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

【问题讨论】:

    标签: spring junit integration-testing


    【解决方案1】:

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

    【讨论】:

    • 这个清理方法是否在每次测试后运行?如果我对@After 感到满意,我不会费心发布这个问题。我正在寻找在类中的所有测试之后运行的东西,但可能是非静态的
    • 你看过 DbUnit 吗?它是一个用于管理测试数据库状态的 Junit 扩展。
    猜你喜欢
    • 2016-09-02
    • 2023-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-19
    • 2018-08-17
    • 1970-01-01
    • 2013-01-16
    相关资源
    最近更新 更多