如何在 MockRestServiceServer 中通过 String 模式期望 requestTo?
How to expect requestTo by String pattern in MockRestServiceServer?
我有测试:
org.springframework.test.web.client.MockRestServiceServer mockServer
当我 运行 与 any(String.class)
或确切 URL 时,它们运行良好:
mockServer.expect(requestTo(any(String.class)))
.andExpect(method(HttpMethod.GET))
.andRespond(withSuccess("response", MediaType.APPLICATION_JSON));
或:
mockServer.expect(requestTo("https://exact-example-url.com/path"))
.andExpect(method(HttpMethod.GET))
.andRespond(withSuccess("response", MediaType.APPLICATION_JSON));
我希望通过字符串模式进行请求以避免检查精确 URL。我可以像
那样编写自定义匹配器
还有其他方法可以通过字符串模式制作mockServer.expect(requestTo(".*example.*"))
吗?
我想 "any" 实际上是一个 Mockito.any() 方法?在那种情况下,您可以使用 Mockito.matches("regex")。请参阅文档:https://static.javadoc.io/org.mockito/mockito-core/1.9.5/org/mockito/Matchers.html#matches(java.lang.String)
编辑: 事实证明,MockRestServiceServer 使用 Hamcrest 匹配器来验证预期(如 requestTo、withSuccess 等方法)。
还有一个方法matchesPattern(java.util.regex.Pattern pattern) in org/hamcrest/Matchersclass从Hamcrest 2开始就有了,可以用来解决你的问题
但是在您的项目中,您可能依赖于旧版本的 Hamcrest (1.3),例如 junit 4.12,最新的 spring-boot-starter-test-2.13,或者,最后,org.mock-server.mockserver-netty.3.10.8(传递)。
因此,您需要:
- 检查项目中 Hamcrest 的实际版本并(如果不是 2+)手动更新此依赖项:https://mvnrepository.com/artifact/org.hamcrest/hamcrest/2.1
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest</artifactId>
<version>2.1</version>
<scope>test</scope>
</dependency>
- 更新您的测试:
mockServer.expect(requestTo(matchesPattern(".*exact-example-url.com.*")))
.andExpect(method(HttpMethod.GET))
.andRespond(withSuccess("response", MediaType.APPLICATION_JSON));
我有测试:
org.springframework.test.web.client.MockRestServiceServer mockServer
当我 运行 与 any(String.class)
或确切 URL 时,它们运行良好:
mockServer.expect(requestTo(any(String.class)))
.andExpect(method(HttpMethod.GET))
.andRespond(withSuccess("response", MediaType.APPLICATION_JSON));
或:
mockServer.expect(requestTo("https://exact-example-url.com/path"))
.andExpect(method(HttpMethod.GET))
.andRespond(withSuccess("response", MediaType.APPLICATION_JSON));
我希望通过字符串模式进行请求以避免检查精确 URL。我可以像
还有其他方法可以通过字符串模式制作mockServer.expect(requestTo(".*example.*"))
吗?
我想 "any" 实际上是一个 Mockito.any() 方法?在那种情况下,您可以使用 Mockito.matches("regex")。请参阅文档:https://static.javadoc.io/org.mockito/mockito-core/1.9.5/org/mockito/Matchers.html#matches(java.lang.String)
编辑: 事实证明,MockRestServiceServer 使用 Hamcrest 匹配器来验证预期(如 requestTo、withSuccess 等方法)。
还有一个方法matchesPattern(java.util.regex.Pattern pattern) in org/hamcrest/Matchersclass从Hamcrest 2开始就有了,可以用来解决你的问题
但是在您的项目中,您可能依赖于旧版本的 Hamcrest (1.3),例如 junit 4.12,最新的 spring-boot-starter-test-2.13,或者,最后,org.mock-server.mockserver-netty.3.10.8(传递)。
因此,您需要:
- 检查项目中 Hamcrest 的实际版本并(如果不是 2+)手动更新此依赖项:https://mvnrepository.com/artifact/org.hamcrest/hamcrest/2.1
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest</artifactId>
<version>2.1</version>
<scope>test</scope>
</dependency>
- 更新您的测试:
mockServer.expect(requestTo(matchesPattern(".*exact-example-url.com.*")))
.andExpect(method(HttpMethod.GET))
.andRespond(withSuccess("response", MediaType.APPLICATION_JSON));