|
对于最新稳定版本,请使用Spring Framework 7.0.1! |
测试客户端应用程序
你可以用客户端测试来测试内部使用Rest模板.这
想法是声明预期请求并提供“存根”回复,这样你就能
专注于单独测试代码(即不运行服务器)。如下
示例展示了如何实现:
-
Java
-
Kotlin
RestTemplate restTemplate = new RestTemplate();
MockRestServiceServer mockServer = MockRestServiceServer.bindTo(restTemplate).build();
mockServer.expect(requestTo("/greeting")).andRespond(withSuccess());
// Test code that uses the above RestTemplate ...
mockServer.verify();
val restTemplate = RestTemplate()
val mockServer = MockRestServiceServer.bindTo(restTemplate).build()
mockServer.expect(requestTo("/greeting")).andRespond(withSuccess())
// Test code that uses the above RestTemplate ...
mockServer.verify()
在上述例子中,MockRestServiceServer(客户端 REST 的核心类
测试)配置Rest模板有个习俗ClientHttpRequestFactory那
提出实际请求,违背预期,并返回“存根”回复。在这方面
我们期待收到请求/问候并想回复一个200分的回复文本/纯文字内容。我们可以定义额外预期请求和存根响应为
需要。当我们定义预期请求和存根响应时,Rest模板可以是
客户端代码中通常使用。测试结束时,mockServer.verify()可以是
用来验证所有期望都已满足。
默认情况下,请求会按照预期的顺序进行。你
可以设置忽略期待订单在构建服务器时,选择了所有
按顺序检查期望值,以找到匹配的请求。那就是说
请求可以按任意顺序提交。以下示例使用忽略期待订单:
-
Java
-
Kotlin
server = MockRestServiceServer.bindTo(restTemplate).ignoreExpectOrder(true).build();
server = MockRestServiceServer.bindTo(restTemplate).ignoreExpectOrder(true).build()
即使是无序请求,默认情况下每个请求也只能运行一次。
这期望方法提供一个超载变体,接受预期计数该参数指定了一个计数范围(例如,一次,多次,麦克斯,明,之间,依此类推)。以下示例使用次:
-
Java
-
Kotlin
RestTemplate restTemplate = new RestTemplate();
MockRestServiceServer mockServer = MockRestServiceServer.bindTo(restTemplate).build();
mockServer.expect(times(2), requestTo("/something")).andRespond(withSuccess());
mockServer.expect(times(3), requestTo("/somewhere")).andRespond(withSuccess());
// ...
mockServer.verify();
val restTemplate = RestTemplate()
val mockServer = MockRestServiceServer.bindTo(restTemplate).build()
mockServer.expect(times(2), requestTo("/something")).andRespond(withSuccess())
mockServer.expect(times(3), requestTo("/somewhere")).andRespond(withSuccess())
// ...
mockServer.verify()
注意,当忽略期待订单不是设置(默认),因此请求
期望按声明顺序排列,则该顺序仅适用于任意的第一个
预期中的请求。例如,如果“/某物”被期望出现两次,随后是
“/somewhere”三次,那么在有
请求“某处”,但除了后续的“/某物”和“某处”,
请求可以随时提交。
作为上述所有选项的替代方案,客户端测试支持还提供ClientHttpRequestFactory你可以配置成Rest模板自
将其绑定到莫克麦克实例。这允许使用实际的服务器端处理请求
逻辑上没有运行服务器。以下示例展示了如何实现:
-
Java
-
Kotlin
MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).build();
this.restTemplate = new RestTemplate(new MockMvcClientHttpRequestFactory(mockMvc));
// Test code that uses the above RestTemplate ...
val mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).build()
restTemplate = RestTemplate(MockMvcClientHttpRequestFactory(mockMvc))
// Test code that uses the above RestTemplate ...
在某些情况下,可能需要实际调用远程服务
嘲笑回应。以下示例展示了如何通过执行响应创造者:
-
Java
-
Kotlin
RestTemplate restTemplate = new RestTemplate();
// Create ExecutingResponseCreator with the original request factory
ExecutingResponseCreator withActualResponse = new ExecutingResponseCreator(restTemplate.getRequestFactory());
MockRestServiceServer mockServer = MockRestServiceServer.bindTo(restTemplate).build();
mockServer.expect(requestTo("/profile")).andRespond(withSuccess());
mockServer.expect(requestTo("/quoteOfTheDay")).andRespond(withActualResponse);
// Test code that uses the above RestTemplate ...
mockServer.verify();
val restTemplate = RestTemplate()
// Create ExecutingResponseCreator with the original request factory
val withActualResponse = new ExecutingResponseCreator(restTemplate.getRequestFactory())
val mockServer = MockRestServiceServer.bindTo(restTemplate).build()
mockServer.expect(requestTo("/profile")).andRespond(withSuccess())
mockServer.expect(requestTo("/quoteOfTheDay")).andRespond(withActualResponse)
// Test code that uses the above RestTemplate ...
mockServer.verify()
在前面的例子中,我们创建执行响应创造者使用ClientHttpRequestFactory来自Rest模板 以前 MockRestServiceServer取代
还有另一种嘲讽回应的视频。
然后我们定义了两种反应的期望:
-
一个小册子
200对/轮廓端点(不会执行实际请求) -
通过呼叫获得的响应
/引用今日端点
在第二种情况下,请求通过ClientHttpRequestFactory那是
之前被捕获。这会产生一个响应,例如可能来自实际的远程服务器,
具体情况不同Rest模板最初配置的。
静态导入
与服务器端测试类似,客户端测试的 fluent API 需要一些静态配置
进口。这些很容易通过搜索找到模拟休息*.Eclipse用户应添加补充模拟休息请求匹配者。*和模拟休息回应创作者。*如
在 Java → 编辑器内容中,Eclipse 偏好设置中的“收藏静态成员”中 →
支持→喜欢的。这允许在输入第一个字符后使用内容辅助
静态方法名称。其他IDE(如IntelliJ)可能不需要额外的需求
配置。检查静态成员是否支持代码补全。
客户端REST测试的进一步示例
Spring MVC 测试自有的测试示例 客户端REST测试的测试。