Spring boot 无法从SpringBoot/JUnit正确加载application.yaml

Spring boot 无法从SpringBoot/JUnit正确加载application.yaml,spring-boot,junit,spring-boot-test,Spring Boot,Junit,Spring Boot Test,我是SpringBoot的新手,我正在尝试开发第一个应用程序 我的应用程序具有应用程序.yaml中提供的配置。目前,它在启动时成功读取其配置 但是,如果我将应用程序嵌入到Springboot/JUnit测试中,则不会正确利用application.yaml 我的印象是,使用Springboot/JUnit,application.yaml 读起来就像它是一个应用程序。属性:它只接受 单行上提供的参数(例如线程池:10) 但不是在多行上 wordpress: themes: defau

我是SpringBoot的新手,我正在尝试开发第一个应用程序

我的应用程序具有
应用程序.yaml
中提供的配置。目前,它在启动时成功读取其配置

但是,如果我将应用程序嵌入到Springboot/JUnit测试中,则不会正确利用
application.yaml

我的印象是,使用Springboot/JUnit,
application.yaml
读起来就像它是一个
应用程序。属性
:它只接受 单行上提供的参数(例如
线程池:10
) 但不是在多行上

wordpress:
  themes:
    default-folder: /wp-content/themes/mkyong

我从github中找到的一个项目中复制了相同的问题:,在目录
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而不是properties)

感谢用户7294900的回答,我发现将注释
@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 {
    }

}
看见