Hamcrest 集成
普通的 MockMvc
提供了一个 API,使用构建器风格的方式来构建请求,可以通过静态导入来启动。Hamcrest 用于定义期望,并为常见需求提供了许多开箱即用的选项。
章节摘要
📄️ 静态导入
在使用 MockMvc 直接执行请求时,你需要静态导入以下内容:
📄️ 配置 MockMvc
MockMvc 可以通过两种方式设置。一种是直接指向你要测试的控制器,并以编程方式配置 Spring MVC 基础设施。第二种是指向包含 Spring MVC 和控制器基础设施的 Spring 配置。
📄️ 设置功能
无论你使用哪个 MockMvc 构建器,所有的 MockMvcBuilder 实现都提供了一些共同且非常有用的功能。例如,你可以为所有请求声明一个 Accept 头,并期望在所有响应中返回状态码 200 以及 Content-Type 头,如下所示:
📄️ 执行请求
本节展示了如何单独使用 MockMvc 来执行请求并验证响应。如果通过 WebTestClient 使用 MockMvc,请参阅编写测试的相应部分。
📄️ 定义期望
你可以通过在执行请求后附加一个或多个 andExpect(..) 调用来定义期望,如下例所示。一旦某个期望失败,其他期望将不再被断言。
📄️ 异步请求
本节展示了如何单独使用 MockMvc 来测试异步请求处理。如果通过 WebTestClient 使用 MockMvc,则无需特别操作以使异步请求正常工作,因为 WebTestClient 会自动处理本节中描述的内容。
📄️ 流式响应
你可以使用 WebTestClient 来测试流式响应,例如 Server-Sent Events。然而,MockMvcWebTestClient 不支持无限流,因为无法从客户端取消服务器流。要测试无限流,你需要绑定到一个正在运行的服务器,或者在使用 Spring Boot 时,使用正在运行的服务器进行测试。
📄️ 筛选注册
在设置 MockMvc 实例时,你可以注册一个或多个 Servlet Filter 实例,如下例所示: