How to set environment variable or system property in spring tests? How to set environment variable or system property in spring tests? java java

How to set environment variable or system property in spring tests?


You can initialize the System property in a static initializer:

@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration(locations = "classpath:whereever/context.xml")public class TestWarSpringContext {    static {        System.setProperty("myproperty", "foo");    }}

The static initializer code will be executed before the spring application context is initialized.


The right way to do this, starting with Spring 4.1, is to use a @TestPropertySource annotation.

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

See @TestPropertySource in the Spring docs and Javadocs.


One can also use a test ApplicationContextInitializer to initialize a system property:

public class TestApplicationContextInitializer implements ApplicationContextInitializer<ConfigurableApplicationContext>{    @Override    public void initialize(ConfigurableApplicationContext applicationContext)    {        System.setProperty("myproperty", "value");    }}

and then configure it on the test class in addition to the Spring context config file locations:

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

This way code duplication can be avoided if a certain system property should be set for all the unit tests.