在 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 不使用应用程序中的任何@Beans,但指定的配置类除外。 (未创建 @Controllers

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

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

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

RobotsTxtTest - 使用 RobotsTxt 库测试 robots.txt 文件 StaticContentTest 检查静态内容是否正确提供。还测试Cache-Control 标头是否设置为application.properties 指定的 TomcatRemoteIpHeaderTest - 测试 tomcat 是否正确应用配置的 remote-ip-header 属性

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

【讨论】:

以上是关于在 Spring Boot with Slice 中使用 MockMVC 测试静态内容的主要内容,如果未能解决你的问题,请参考以下文章

Spring Security with Boot

Spring Batch with Spring boot - 配置 JobRepositoryFactoryBean

RSS Feeds with Spring Boot

《Pro Spring Boot 2》第四章:Web Applications with Spring Boot

Spring Boot with Spring Boot:将基本身份验证与JWT令牌身份验证相结合[复制]

《Pro Spring Boot 2》第五章:Data Access with Spring Boot