Spring Boot MockMVC 测试不加载 Yaml 文件

Posted

技术标签:

【中文标题】Spring Boot MockMVC 测试不加载 Yaml 文件【英文标题】:Spring Boot MockMVC Test does not load Yaml file 【发布时间】:2015-11-06 07:52:49 【问题描述】:

我的配置位于类路径根目录 (src/main/resources/) 的 application.yml 文件中。当我正常启动应用程序时,配置加载正常。但是在我的测试中,application.yml 文件根本没有加载。

我的测试标题如下:

@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextConfiguration(classes = Configuration.class)
@org.junit.Ignore
public class ApplicationIntegrationTest 

   @Inject
   private WebApplicationContext wac;

   private MockMvc mockMvc;

   @Before
   public void setup() 
       this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).build();
   
...

配置类:

@EnableAutoConfiguration
@ComponentScan("c.e.t.s.web, c.e.t.s.service")
public class Configuration extends WebMvcConfigurerAdapter 

当我调试应用程序时,我看到 yml 文件在 ConfigFileApplicationListener 中加载,但在测试中未调用 ConfigFileApplicationListener。

【问题讨论】:

因为你做错了。您应该使用@SpringApplicationConfiguration 而不是@ContextConfiguration。正如reference guide 中所解释的那样。 你是对的!谢谢!如果你能做出这样的回答,我很乐意接受。 【参考方案1】:

在 Spring Boot 参考指南中有一个 whole chapter 关于测试。 This section 解释了如何对 Spring Boot 应用程序进行基本测试。

简而言之,当您使用 Spring Boot 并且想要进行测试时,您需要使用 @ SpringApplicationConfiguration 注释而不是 @ContextConfiguration 注释。 @SpringApplicationConfiguration 是一个专门的 @ContextConfiguration 扩展,它也为测试用例注册/引导一些 Spring Boot 魔法。

【讨论】:

【参考方案2】:

StringBoot、jUnit 和 YAML 之间有很好的集成。

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(MainBootApplication.class)
public class MyJUnitTests 
    ...



@Configuration
@EnableConfigurationProperties
@ConfigurationProperties(prefix = "section1")
public class BeanWithPropertiesFromYML 
    ...

更多详情请查看我的评论:https://***.com/a/37270778/3634283

【讨论】:

以上是关于Spring Boot MockMVC 测试不加载 Yaml 文件的主要内容,如果未能解决你的问题,请参考以下文章

运行 Spring Boot MockMvc 测试时“找不到返回值的转换器”

Spring Boot MVC 测试 - MockMvc 始终为空

使用 spring-data-jpa 和 MockMvc 进行 spring boot junit 测试

spring boot 测试无法注入 TestRestTemplate 和 MockMvc

Spring Boot 应用程序在 mockmvc 测试中失败

在 Spring Boot with Slice 中使用 MockMVC 测试静态内容