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