如何在 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 如何在 Spring Boot 中设置数据源

如何在 Spring Boot 中设置 enableLoggingRequestDetails='true'

如何在 Spring Boot 中设置 UTF-8 字符编码?

如何在spring boot中设置禁用浏览器缓存?

如何在 Spring Boot 中的 DatabaseConfig 中设置属性

如何在 Spring Boot 中设置副本集?