我正在尝试找出一种方法来使用仅自动配置 org.springframework.web.servlet.resource.ResourceHttpRequestHandler
(而不是 Controller )的 WebSlice 使用 MockMVC 测试内容服务
我试过这样的:
@RunWith(SpringRunner.class)
@WebMvcTest(
controllers = {}
)
public class StaticAssetsMVCTest {
但 {} 是默认值,它会查找所有 Controller 。有没有一种方法可以排除所有 Controller ,但保留我的应用程序具有的其他基本 spring-web 内容,以便我可以只测试静态 Assets 切片?
最佳答案
如何针对成熟的服务器测试静态内容?
这是一个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 安全 overrides Cache-Control
header 。可能这不是我们想要的,尤其是对于静态资源。
另请参阅:How to enable HTTP response caching in Spring Boot
@LeanWebTest
除了指定的配置类外,不使用应用程序中的任何@Bean
。 (未创建 @Controllers
)
我看到以下方面适用于@LeanWebTest
:
robots.txt
文件javax.servlet.Filter
- 静态资源压缩
- 静态资源缓存
- 等..
示例应用程序有一些测试:
- >
RobotsTxtTest
- 使用 RobotsTxt 测试robots.txt
文件图书馆 - >
StaticContentTest
检查是否正确提供了静态内容。还测试是否按照application.properties
指定的方式设置了 - >
TomcatRemoteIpHeaderTest
- 测试 tomcat 是否正确应用配置remote-ip-header
属性(property)
Cache-Control
header
请注意,该项目是概念的粗略演示
关于spring-boot - 在带有 Slice 的 Spring Boot 中使用 MockMVC 测试静态内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54913215/