如何强制Spring上下文的一个新版本的测试执行前(How to force a fresh ver

2019-08-06 10:26发布

我用的是SpringJUnit4ClassRunner编写集成测试。 我也用@DirtiesContext对于离开上下文的中断状态的后面,并且工作得很好的测试。

但现在我有一个测试集的静态初始化一个重要SystemProperty,进而在Spring上下文中使用。 当测试自身执行这再次工作正常。 但是,当我运行与Spring上下文被已经与指出属性集创建并得到由我的新的试验重复使用其他测试的测试。

我怎样才能迫使新创建Spring上下文的在我的测试,然后将使用改变了系统属性?

Answer 1:

由于Spring 4.2的DirtiesContext注释支持以下新阶段: BEFORE_CLASS , BEFORE_EACH_TEST_METHOD和BEFORE_METHOD 。 所以,你现在可以例如做:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(...)
@DirtiesContext(classMode = ClassMode.BEFORE_EACH_TEST_METHOD)
public class MyTest {
   ..
}


Answer 2:

预春季4.2:

我只能建议一劈遗憾的是 - 你是对的,似乎没有成为一个简单的方法来初始化一个新的应用程序上下文,而不是使用缓存应用程序上下文。 这些都是一些,我可以建议的解决方法:

  1. 使用略有不同@ContextConfiguration -一个快速和肮脏的方式做到这一点可能是一个加@ActiveProfiles注解测试类,今年春季的方式将被迫缓存中同一个新的密钥或定义与现有的虚拟情境配置进口

  2. 一个黑客,但JUnit的4.11+允许在测试方式排序的控制一定程度,就可以有一个测试方法,目标测试方法前面,并有注释的伪测试方法@DirtiesContext ,这样一来当你的目标方法被调用新的上下文将被创建。



Answer 3:

有几种选择:

  1. 您可以通过加载另一个配置为它创造了该测试的个体Spring上下文。 这样一来,你的测试将是完全独立的所有其他试验。
  2. 您可以创建此测试的精简配置。 这将达到相同,但速度更快。
  3. 创建其中首次运行该测试的测试套件。


文章来源: How to force a fresh version of the Spring context BEFORE the test executes
标签: spring junit4