如何在 Spring Boot Tests 中设置 servlet 上下文路径?
Posted
技术标签:
【中文标题】如何在 Spring Boot Tests 中设置 servlet 上下文路径?【英文标题】:How to set servlet context path in Spring Boot Tests? 【发布时间】:2019-12-25 02:34:22 【问题描述】:我使用 Spring Boot 2.1.2.RELEASE 编写集成测试,但无法设置所需的上下文路径。它总是等于空字符串(通过 servletContext.getContextPath() 获得)。
应用程序测试属性:
server.servlet.context-path=/app
测试配置:
@ExtendWith(SpringExtension.class)
@ContextConfiguration
@Import(MailSenderAutoConfiguration.class, ThymeleafAutoConfiguration.class)
@WebAppConfiguration
@TestPropertySource(locations="classpath:application-test.properties")
public class MyServiceTests ...
调用代码:
@Value("#'$application.base-url' + servletContext.contextPath")
private String siteUrl;
application-test.properties 中的其他属性按预期注入。上下文路径通常在我运行服务器时设置。我尝试将此测试作为@SpringBootTest 启动,在变量@TestPropertySource(locations="classpath:application-test.properties", properties = "server.servlet.context-path=/app") 中提供了上下文路径,但是没有结果。如何为我的测试设置上下文路径?
【问题讨论】:
这是一个有点奇怪的问题,因为您通常以允许上下文根在运行时提供或根本不存在的方式编写 java 代码。 你能分享你用来阅读它的代码吗? @muasif80 - 更新帖子 【参考方案1】:我找到了这样的解决方法:
文件 application-test.properties:
application.base-url=http://test.ru
server.servlet.context-path=/app
application.root-url=$application.base-url$server.servlet.context-path:
调用代码:
@Value("$application.root-url")
private String siteUrl;
【讨论】:
以上是关于如何在 Spring Boot Tests 中设置 servlet 上下文路径?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Spring Boot 中设置 enableLoggingRequestDetails='true'
如何在 Spring Boot 中设置 UTF-8 字符编码?