如何在弹簧测试中设置环境变量或系统属性?

我想编写一些测试来检查已部署WAR的XML Spring配置。不幸的是,某些 Bean 需要设置某些环境变量或系统属性。在将方便的测试样式与@ContextConfiguration一起使用时,如何在初始化弹簧豆之前设置环境变量?

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:whereever/context.xml")
public class TestWarSpringContext { ... }

如果我使用注释配置应用程序上下文,则看不到可以在初始化 spring 上下文之前执行某些操作的钩子。


答案 1

您可以在静态初始值设定项中初始化 System 属性:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:whereever/context.xml")
public class TestWarSpringContext {

    static {
        System.setProperty("myproperty", "foo");
    }

}

静态初始值设定项代码将在初始化 spring 应用程序上下文之前执行。


答案 2

从Spring 4.1开始,正确的方法是使用注释。@TestPropertySource

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:whereever/context.xml")
@TestPropertySource(properties = {"myproperty = foo"})
public class TestWarSpringContext {
    ...    
}

请参阅春季文档Javadocs@TestPropertySource


推荐