我正在尝试找出一种方法,使用MockMVC使用仅自动配置org.springframework.web.servlet.resource.ResourceHttpRequestHandler
(而不是控制器)的WebSlice来测试内容的提供方式
我尝试过这样的事情:
@RunWith(SpringRunner.class)
@WebMvcTest(
controllers = {}
)
public class StaticAssetsMVCTest {
但是{}是缺省值,它将查找所有控制器。有没有办法排除所有控制器,但保留我的应用程序具有的其他基本spring-web东西,以便我可以仅测试静态资产片?
答案 0 :(得分:0)
如何针对功能强大的服务器测试静态内容?
这里是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
。 (未创建@Controllers
)
我看到适用于@LeanWebTest
的以下方面:
robots.txt
文件javax.servlet.Filter
s 该示例应用程序进行了一些测试:
RobotsTxtTest
-使用RobotsTxt库测试robots.txt
文件StaticContentTest
检查是否正确提供了静态内容。还测试Cache-Control
标头是否设置为application.properties
TomcatRemoteIpHeaderTest
-测试tomcat是否正确应用配置的remote-ip-header
属性请注意,该项目只是对该概念的粗略演示