【问题标题】:Avoid re-running migrations in spring test suite避免在春季测试套件中重新运行迁移
【发布时间】:2017-08-08 20:40:21
【问题描述】:

我正在开发一个包含大约 300 多个 spring 集成测试的代码库,这些测试是从此类继承的

@RunWith(SpringRunner.class)
@DirtiesContext(classMode=DirtiesContext.ClassMode.BEFORE_CLASS) //enable migration if IT ran before
@ActiveProfiles(Constants.SpringProfiles.TEST)
@SpringBootTest
@Transactional
public abstract class BaseTest extends BaseMockitoTest { .... }

这个配置当然会重新初始化完整的 Spring 应用程序,这在我们的整体集成套件中需要大量时间。我想了解是否可以将此配置更改为避免重新初始化上下文的内容。

我已经尝试删除 @DirtiesContext,但这没有帮助。

我想要的是,在初始化期间运行的 spring 初始化和迁移应该保持原样,其余的东西应该在测试执行时回滚。

【问题讨论】:

    标签: spring spring-boot junit integration-testing


    【解决方案1】:

    是的,@DirtiesContext 是为懒人准备的:P - 当初始化时间和/或测试用例数量增加时,它会抓住你。

    我们的数据库迁移是我们构建链中的一个单独步骤(包括迁移生产数据)。

    在我们运行测试用例之前,我们使用当前架构设置数据库 - 这也是链中的一个单独步骤。所以我们的集成测试假设架构是正确的。如果架构创建失败,我们不会运行测试,因为无论如何报告都没有意义。

    我喜欢这种方法,因为我们可以分别管理和分析集成测试和迁移测试,这意味着:集成测试可以运行,即使迁移失败。它们可以并行运行,所以你应该早一点得到反馈。

    编辑:除了 Paul 的声明:我们的一些集成测试在单独的事务中执行任务,我们无法断言这些执行的结果:-/

    【讨论】:

      【解决方案2】:

      “在测试执行时应该回滚剩余的东西”是什么意思?

      通常的方法是不使用 DirtiesContext,而只使用 SpringBootTest 并使您的测试具有事务性,以便它们在每次测试结束时回滚任何添加的数据。见:

      http://docs.spring.io/spring/docs/4.3.7.RELEASE/spring-framework-reference/htmlsingle/#testcontext-tx-enabling-transactions

      【讨论】:

        猜你喜欢
        • 2018-11-11
        • 1970-01-01
        • 2016-04-16
        • 2011-09-26
        • 2012-09-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多