我用的是SpringJUnit4ClassRunner
编写集成测试。 我也用@DirtiesContext
对于离开上下文的中断状态的后面,并且工作得很好的测试。
但现在我有一个测试集的静态初始化一个重要SystemProperty,进而在Spring上下文中使用。 当测试自身执行这再次工作正常。 但是,当我运行与Spring上下文被已经与指出属性集创建并得到由我的新的试验重复使用其他测试的测试。
我怎样才能迫使新创建Spring上下文的在我的测试,然后将使用改变了系统属性?
我用的是SpringJUnit4ClassRunner
编写集成测试。 我也用@DirtiesContext
对于离开上下文的中断状态的后面,并且工作得很好的测试。
但现在我有一个测试集的静态初始化一个重要SystemProperty,进而在Spring上下文中使用。 当测试自身执行这再次工作正常。 但是,当我运行与Spring上下文被已经与指出属性集创建并得到由我的新的试验重复使用其他测试的测试。
我怎样才能迫使新创建Spring上下文的在我的测试,然后将使用改变了系统属性?
由于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 {
..
}
预春季4.2:
我只能建议一劈遗憾的是 - 你是对的,似乎没有成为一个简单的方法来初始化一个新的应用程序上下文,而不是使用缓存应用程序上下文。 这些都是一些,我可以建议的解决方法:
使用略有不同@ContextConfiguration
-一个快速和肮脏的方式做到这一点可能是一个加@ActiveProfiles
注解测试类,今年春季的方式将被迫缓存中同一个新的密钥或定义与现有的虚拟情境配置进口
一个黑客,但JUnit的4.11+允许在测试方式排序的控制一定程度,就可以有一个测试方法,目标测试方法前面,并有注释的伪测试方法@DirtiesContext
,这样一来当你的目标方法被调用新的上下文将被创建。
有几种选择: