【问题标题】:Is it possble to reset Spring-Test's context cache before a test suite runs (not after)是否可以在测试套件运行之前(而不是之后)重置 Spring-Test 上下文缓存
【发布时间】:2014-11-14 13:36:07
【问题描述】:

我们使用带有 junit 的 spring-test (4.x)。是否可以在测试套件运行之前(而不是之后)重置 spring-test 的上下文缓存之前

@DirtiesContext 似乎只有在执行后重置上下文的选项。我们想要一种方法来向 spring-test 发出信号,即应该使用新的非缓存上下文运行特定的测试套件(以便我们可以轻松地覆盖测试中的 bean 定义)。这是@DirtiesContext 的扩展还是@RunWithFreshContext 之类的新注解并不重要,只要我们可以这样做:-)

【问题讨论】:

    标签: spring-test


    【解决方案1】:

    更新

    从 Spring Framework 4.2 开始,可以在测试类或测试方法之前使用 @DirtiesContext 关闭测试 ApplicationContext。有关详细信息,请参阅 JIRA 问题SPR-12429


    不,从 Spring Framework 4.1.2 开始,目前无法让 Spring TestContext Framework 在执行测试方法或测试类之前从缓存中删除 ApplicationContext

    但是,您可以开发自己的自定义 TestExecutionListener 来为您执行此操作。例如,您可以扩展DirtiesContextTestExecutionListener 并在您认为合适的beforeTestClass(...)beforeTestMethod(...) 方法中执行其dirtyContext(...) 方法。当然,如果您在 DirtiesContextTestExecutionListener 旁边包含您的自定义 TestExecutionListener,您不会希望您的自定义侦听器执行来自 DirtiesContextTestExecutionListenerafterTestMethod(...)afterTestClass(...) 的相同操作。因此,您可以选择使用 no-ops 覆盖这两种方法,或者放弃声明 DirtiesContextTestExecutionListener 以支持您的自定义扩展。

    问候,

    Sam(spring-test 的组件负责人)

    【讨论】:

    • 谢谢山姆。我对此有更多想法 - 最有用的场景是我们可以声明单个测试套件没有使用缓存的上下文并创建了新的上下文,但为其他测试套件保留了缓存的上下文(以免对可能利用缓存上下文的其他测试套件的性能造成太大影响)。
    • @user2591854,如果您想要这样的“丢弃上下文”功能,请创建一个请求它的 JIRA 问题。谢谢。 -山姆
    • 好主意,atm 我们必须每隔一个测试就@DirtyContext,因为很少有测试具有不同的上下文配置,而且它变得无法处理。如果该问题已存在,请为该问题投票
    • @ametiste,据我所知,spring-test 中不存在要求“丢弃上下文”的问题。因此,请随时 create a new issue 请求此功能并将其分配给“测试”组件。
    • 这个问题是不是已经产生了?如果没有,我会创建一个。
    猜你喜欢
    • 2014-11-24
    • 2018-12-04
    • 2018-02-14
    • 1970-01-01
    • 2020-01-02
    • 1970-01-01
    • 2011-09-20
    • 2010-11-14
    • 2012-09-27
    相关资源
    最近更新 更多