如何为具有属性依赖项的 Spring Boot Application 类编写测试用例 - 无法解析占位符
Posted
技术标签:
【中文标题】如何为具有属性依赖项的 Spring Boot Application 类编写测试用例 - 无法解析占位符【英文标题】:How to write test case for Spring boot Application class with properties dependency - Could not resolve placeholder 【发布时间】:2019-11-04 17:10:07 【问题描述】:我按照下面的 *** 页面为 Application 类编写了测试用例 How to test main class of Spring-boot application
当我运行我的测试用例时,我收到以下错误
Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'http.client.connection.timeout' in value "$http.client.connection.timeout"
.....
我在我的测试用例中添加了@TestPropertySource("classpath:test-manifest.yml")。
test-manifest.yml 有 'http.client.connection.timeout'
我的测试用例
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.TestPropertySource;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import com.mypackage.Application;
@RunWith(SpringJUnit4ClassRunner.class)
@TestPropertySource("classpath:test-manifest.yml")
@SpringBootTest
public class MainTest
@Test
public void main()
Application.main(new String[] );
如何让它发挥作用?任何帮助表示赞赏。
【问题讨论】:
【参考方案1】:TestPropertySource
不支持 yaml 配置文件。
查看https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/test/context/TestPropertySource.html
支持的文件格式
支持传统和基于 XML 的属性文件格式,例如“classpath:/com/example/test.properties”或“file:/path/to/file.xml”。
另请参阅
TestPropertySourceUtils.addPropertiesFilesToEnvironment()
:
try
for (String location : locations)
String resolvedLocation = environment.resolveRequiredPlaceholders(location);
Resource resource = resourceLoader.getResource(resolvedLocation);
environment.getPropertySources().addFirst(new ResourcePropertySource(resource));
ResourcePropertySource
只能处理 .properties 文件,不能处理 .yml。在普通的app中,YamlPropertySourceLoader
被注册并可以处理。
可能的解决方案:
要么将您的配置更改为 .properties,要么依靠配置文件来加载您的测试配置。
【讨论】:
我用“application.properties”文件替换了“test-manifest.yml”。它按预期工作,但我的其他测试用例正在使用“.yml”TestPropertySource。为什么它可以使用 MockMvc 处理我的传统测试用例? 如果您使用 application.properties(甚至 application.yml),则不需要 TestPropertySource。如果没有看到其他测试,很难猜测它们会发生什么。以上是关于如何为具有属性依赖项的 Spring Boot Application 类编写测试用例 - 无法解析占位符的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 spring boot 插件 2.0.x 从一个具有不同依赖项的 gradle 项目生成 2 个 jars
如何为具有 Spring Security 配置的 Spring Boot API 编写单元测试