Spring Boot properties in 'application.yml' not loading from JUnit Test Spring Boot properties in 'application.yml' not loading from JUnit Test java java

Spring Boot properties in 'application.yml' not loading from JUnit Test


Try this:

@RunWith(SpringJUnit4ClassRunner.class)@SpringApplicationConfiguration(classes = TestApplication.class,     initializers = ConfigFileApplicationContextInitializer.class)public class SomeTestClass {    ...}

EDIT:

For Spring Boot version 1.5+, SpringApplicationConfiguration was removed in favour of SpringBootTest or direct use of SpringBootContextLoader.

You can still use initializers parameter with ContextConfiguration annotation.


The trick to load any custom yml file in SpringBoot 2.0 w/o using @SpringBootTest

  • create some yml file in test\resources
  • Use ConfigFileApplicationContextInitializer and spring.config.location property

Example Code:

@RunWith(SpringRunner.class)@ContextConfiguration(    classes = { MyConfiguration.class, AnotherDependancy.class },    initializers = {ConfigFileApplicationContextInitializer.class} )@TestPropertySource(properties = { "spring.config.location=classpath:myApp-test.yml" })public class ConfigProviderTest {    @Autowired    private MyConfiguration myConfiguration; //this will be filled with myApp-test.yml    @Value("${my.config-yml-string}")   private String someSrting; //will get value from the yml file.}

For JUnit 5 use the @ExtendWith(SpringExtension.class) annotation instead of @RunWith(SpringRunner.class)


Here's another way: [Spring Boot v1.4.x]

@Configuration@ConfigurationProperties(prefix = "own")public class OwnSettings {    private String name;    Getter & setters...}

import org.springframework.boot.test.context.SpringBootTestContextBootstrapper;import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;@RunWith(SpringJUnit4ClassRunner.class)@BootstrapWith(SpringBootTestContextBootstrapper.class)public class OwnSettingsTest {  @Autowired  private OwnSettings bean;  @Test  public void test() {    bean.getName();  }}

This works ONLY if also 'application.properties' file exists.

e.g. maven project:

src/main/resources/application.properties [ The file can be empty but it's mandatory! ]
src/main/resources/application.yml [here's your real config file]