在 Spring Boot with Slice 中使用 MockMVC 测试静态内容
Posted
技术标签:
【中文标题】在 Spring Boot with Slice 中使用 MockMVC 测试静态内容【英文标题】:Test static content with MockMVC in Spring Boot with Slice 【发布时间】:2019-07-21 15:10:04 【问题描述】:我正在尝试找出一种方法来使用 MockMVC 测试使用仅自动配置 org.springframework.web.servlet.resource.ResourceHttpRequestHandler
(而不是控制器)的 WebSlice 提供内容
我尝试过这样的事情:
@RunWith(SpringRunner.class)
@WebMvcTest(
controllers =
)
public class StaticAssetsMVCTest
但 是默认值,它会查找所有控制器。有没有办法排除所有控制器,但保留我的应用程序拥有的其他基本 spring-web 东西,以便我可以只测试静态资产切片?
【问题讨论】:
【参考方案1】:如何针对成熟的服务器测试静态内容?
这是一个sample application 来说明我在说什么。
此类测试的入口点是 @LeanWebTest
注释:
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, classes =
MvcConfig.class,
WebSecurityConfig.class
)
@EnableAutoConfiguration(exclude =
DataSourceAutoConfiguration.class,
JpaRepositoriesAutoConfiguration.class
)
@Retention(RetentionPolicy.RUNTIME)
public @interface LeanWebTest
@LeanWebTest
是一个@SpringBootTest
,在随机端口使用完全配置的服务器。
它指定了以下@Configuration
类:
MvcConfig
- 在示例项目中它是空的。但这可能会影响服务器提供静态内容的方式
WebSecurityConfig
Spring Security overrides Cache-Control
标头。可能这不是我们想要的,尤其是静态资源。
另请参阅:How to enable HTTP response caching in Spring Boot
@LeanWebTest
不使用应用程序中的任何@Bean
s,但指定的配置类除外。 (未创建 @Controllers
)
我看到以下方面适用于@LeanWebTest
s:
robots.txt
文件
javax.servlet.Filter
s
静态资源压缩
静态资源缓存
等等..
示例应用程序有一些测试:
RobotsTxtTest
- 使用 RobotsTxt 库测试 robots.txt
文件
StaticContentTest
检查静态内容是否正确提供。还测试Cache-Control
标头是否设置为application.properties
指定的
TomcatRemoteIpHeaderTest
- 测试 tomcat 是否正确应用配置的 remote-ip-header
属性
请注意,该项目是概念的粗略演示
【讨论】:
以上是关于在 Spring Boot with Slice 中使用 MockMVC 测试静态内容的主要内容,如果未能解决你的问题,请参考以下文章
Spring Batch with Spring boot - 配置 JobRepositoryFactoryBean
《Pro Spring Boot 2》第四章:Web Applications with Spring Boot