spring-boot - 在带有 Slice 的 Spring Boot 中使用 MockMVC 测试静态内容

标签 spring-boot spring-mvc testing spring-web mockmvc

我正在尝试找出一种方法来使用仅自动配置 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 类:

Spring 安全 overrides Cache-Control header 。可能这不是我们想要的,尤其是对于静态资源。

另请参阅:How to enable HTTP response caching in Spring Boot

@LeanWebTest 除了指定的配置类外,不使用应用程序中的任何@Bean。 (未创建 @Controllers)

我看到以下方面适用于@LeanWebTest:

  • robots.txt 文件
  • javax.servlet.Filter
  • 静态资源压缩
  • 静态资源缓存
  • 等..

示例应用程序有一些测试:


请注意,该项目是概念的粗略演示

关于spring-boot - 在带有 Slice 的 Spring Boot 中使用 MockMVC 测试静态内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54913215/

相关文章:

java - 在Spring MVC中,对请求体使用Jaxb注释的正确配置是什么?

angular - Cypress 中的 'ng' 是什么

java - 类未在 spring-boot 中实例化(j2EE 到 spring-boot 迁移)

java - 如何在两个Spring Controller 内传递参数

spring-boot - Spring.jpa.open-in-view 给出异常

java - 无法将 DWR 与 Spring 合并

testing - 如何检查是否在 geb 中找到 href 元素

grails - 不计算 Spock 集成测试交互

spring-boot - thymeleaf-spring4:jar无法找到工件-Gradle Intellij

java - Spring Boot应用程序中的Hadoop distcp-ClassNotFoundException