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
andspring.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]