我是SpringBoot的新手,正在尝试开发第一个应用程序。
我的应用程序具有application.yaml
中提供的配置。当前,它在启动时成功读取其配置。
但是,如果我将应用程序嵌入Springboot / JUnit测试中,则application.yaml
不会被正确利用。
我的印象是,使用Springboot / JUnit,
application.yaml
是 读起来就像是一个application.properties
:它只接受 单行提供的参数(例如thread-pool: 10
) 而不是多行wordpress: themes: default-folder: /wp-content/themes/mkyong
我从我在github:XPath Operators & Functions的目录yaml-simple
中找到的项目复制了同样的问题
应用程序成功读取其配置:
@SpringBootApplication
public class Application implements CommandLineRunner {
@Autowired
private WordpressProperties wpProperties;
@Autowired
private GlobalProperties globalProperties;
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@Override
public void run(String... args) {
System.out.println(globalProperties);
System.out.println(wpProperties);
}
}
但是如果我在目录中创建以下JUnit测试
src/test/java/com/mkyong
@RunWith(SpringRunner.class)
@TestPropertySource(locations="classpath:application.yml")
public class MyTest {
@Autowired
private WordpressProperties wpProperties;
@Autowired
private GlobalProperties globalProperties;
@Test
public void myTest() {
Assert.assertTrue(globalProperties.getThreadPool() == 10); /// OK
Assert.assertEquals("/wp-content/themes/mkyong", wpProperties.getThemes().getDefaultFolder()); // KO
}
@SpringBootApplication
static class TestConfiguration {
}
}
在运行它时,仅部分读取了配置!!!
(请注意,使用application.properties
不会出现我的问题,但是我更喜欢使用Yaml来代替属性)
答案 0 :(得分:0)
感谢user7294900的回答,我发现在测试类中添加注释@ContextConfiguration(initializers = ConfigFileApplicationContextInitializer.class)
可以解决问题:
@RunWith(SpringRunner.class)
@TestPropertySource(locations="classpath:application.yml")
@ContextConfiguration(initializers = ConfigFileApplicationContextInitializer.class)
public class MyTest {
@Autowired
private WordpressProperties wpProperties;
@Autowired
private GlobalProperties globalProperties;
@Test
public void myTest() {
Assert.assertTrue(globalProperties.getThreadPool() == 10);
Assert.assertEquals("/wp-content/themes/mkyong", wpProperties.getThemes().getDefaultFolder());
}
@SpringBootApplication
static class TestConfiguration {
}
}