我遵循下面的StackOverflow页面,并为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[] {});
}
}
如何使其起作用?任何帮助表示赞赏。
答案 0 :(得分:2)
TestPropertySource
不支持Yaml配置文件。
支持的文件格式
同时支持传统和基于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。在常规应用中,YamlPropertySourceLoader
已注册并且可以处理。
可能的解决方案:
将配置更改为.properties或依靠配置文件加载测试配置。