Hamcrest 集成
普通的MockMvc提供了一个API,允许使用构建器风格的方法来构建请求,这些方法可以通过静态导入来启动。Hamcrest被用来定义预期值(expectations),并且为常见需求提供了许多现成的选项。
部分总结
📄️ 静态导入
当直接使用MockMvc执行请求时,你需要对以下内容进行静态导入:
📄️ 配置MockMvc
MockMvc可以通过两种方式之一进行配置。一种是直接指向你想要测试的控制器,并以编程方式配置Spring MVC的基础架构。另一种是指向包含Spring MVC及其控制器基础架构的Spring配置文件。
📄️ 设置功能
无论你使用哪种MockMvc构建器,所有的MockMvcBuilder实现都提供了一些常见且非常实用的功能。例如,你可以为所有请求声明一个Accept头,并期望所有响应的状态码为200,同时还可以在所有响应中期望存在Content-Type头,具体如下:
📄️ 执行请求
本节展示了如何单独使用MockMvc来执行请求和验证响应。如果是通过WebTestClient使用MockMvc,请参阅“编写测试”部分的相应内容。
📄️ 定义预期
你可以通过在执行请求后添加一个或多个expect(..)调用来定义预期,如下例所示。一旦有一个预期失败,其他预期将不再被验证。
📄️ 异步请求
本节展示了如何单独使用MockMvc来测试异步请求处理。如果通过WebTestClient使用MockMvc,那么无需进行任何特殊操作即可实现异步请求,因为WebTestClient会自动执行本节中描述的功能。
📄️ 流式响应
你可以使用 WebTestClient 来测试流式响应,例如 Server-Sent Events。然而,MockMvcWebTestClient 不支持无限流(infinite streams),因为从客户端无法取消服务器的流式传输。要测试无限流,你需要绑定到一个正在运行的服务器上;或者在使用 Spring Boot 时,也需要在与正在运行的服务器一起进行测试。
📄️ 过滤注册
在设置MockMvc实例时,可以注册一个或多个Servlet Filter实例,如下例所示: