如何在春季测试中设置环境变量或系统属性?
我想编写一些测试来检查部署的WAR的XML Spring配置。 不幸的是一些bean需要设置一些环境变量或系统属性。 在使用方便的测试样式和@ContextConfiguration时,如何在spring bean初始化之前设置一个环境变量?
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:whereever/context.xml")
public class TestWarSpringContext { ... }
如果我使用注释来配置应用程序上下文,那么在Spring上下文初始化之前我没有看到一个可以做些事情的钩子。
您可以在静态初始化器中初始化System属性:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:whereever/context.xml")
public class TestWarSpringContext {
static {
System.setProperty("myproperty", "foo");
}
}
在初始化Spring应用程序上下文之前,将执行静态初始化程序代码。
从Spring 4.1开始,正确的做法是使用@TestPropertySource
注释。
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:whereever/context.xml")
@TestPropertySource(properties = {"myproperty = foo"})
public class TestWarSpringContext {
...
}
请参阅Spring文档和Javadocs中的@TestPropertySource。
也可以使用测试ApplicationContextInitializer来初始化系统属性:
public class TestApplicationContextInitializer implements ApplicationContextInitializer<ConfigurableApplicationContext>
{
@Override
public void initialize(ConfigurableApplicationContext applicationContext)
{
System.setProperty("myproperty", "value");
}
}
然后在Spring上下文配置文件位置之外将其配置在测试类上:
@ContextConfiguration(initializers = TestApplicationContextInitializer.class, locations = "classpath:whereever/context.xml", ...)
@RunWith(SpringJUnit4ClassRunner.class)
public class SomeTest
{
...
}
如果应该为所有单元测试设置某个系统属性,则可以避免代码复制。
链接地址: http://www.djcxy.com/p/82043.html上一篇: How to set environment variable or system property in spring tests?