【问题标题】:Could not resolve placeholder 'version.v1' in value "/api/${version.v1}"无法解析值“/api/${version.v1}”中的占位符“version.v1”
【发布时间】:2019-11-27 17:18:49
【问题描述】:
我正在尝试使用 Mockito 编写 Springboot 端点单元测试。系统在测试执行上下文期间未能初始化占位符。你能帮我理解我哪里出错了吗?
@SpringJUnitWebConfig
@ContextConfiguration(classes=MockLocationsController.class)
@TestPropertySource(properties = {
"version.v1=v1",
})
public class MockLocationsControllerTest {
}
原因:java.lang.IllegalArgumentException:无法解析
值“/api/${version.v1}”中的占位符“version.v1”
【问题讨论】:
标签:
java
spring-boot
spring-mvc
mockito
【解决方案1】:
通过提供自定义 @ContextConfiguration,您创建了一个有限的 Spring Test 上下文,它很可能没有 PropertyPlaceholderConfigurer bean。没有该 bean 属性占位符将无法解析。
通常使用 @WebMvcTest 声明带有模拟的 Web 层的 Spring Boot 测试,这使您可以使用 PropertyPlaceholderConfigurer 进行最小的工作设置。
@SpringJUnitWebConfig
@WebMvcTest(MockLocationsController.class)
@TestPropertySource(properties = {
"version.v1=v1",
})
public class MockLocationsControllerTest {
}