What am I doing wrong? I'm using this little standalone App which runs and finds my src/main/resources/config/application.yml. The same configuration doesn't work from JUnit, see below:
@Configuration @ComponentScan @EnableConfigurationProperties  public class TestApplication {      public static void main(String[] args) {          SpringApplication.run(TestApplication.class);     } }   @Component @ConfigurationProperties  public class Bean{     ... }   The following doesn't work, the same properties in application.yml are not loaded and Bean has only null values:
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = TestApplication.class)  public class SomeTestClass {     ... } 
                We can use @SpringBootTest annotation which loads the yml file from src\main\java\com... hence when we execute the unit test, all of the properties are already there in the config properties class. @Data @Component @RefreshScope @ConfigurationProperties(prefix = "address.
You can use @TestPropertySource annotation in your test class. Just annotate @TestPropertySource("classpath:config/mailing. properties") on your test class. You should be able to read out the property for example with the @Value annotation.
To access the YAML properties, we'll create an object of the YAMLConfig class, and access the properties using that object. In the properties file, we'll set the spring. profiles. active environment variable to prod.
To read from the application. yml or property file : The easiest way to read a value from the property file or yml is to use the spring @value annotation.
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
ConfigFileApplicationContextInitializer and spring.config.location propertyExample 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)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With