我有以下测试:
org.springframework.test.web.client.MockRestServiceServer mockServer
当我使用any(String.class)
或确切的网址运行时,它们会很好地工作:
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。我可以像在Spring MockRestServiceServer handling multiple requests to the same URI (auto-discovery)
上写自定义匹配器还有其他方法可以通过字符串模式制作mockServer.expect(requestTo(".*example.*"))
吗?
答案 0 :(得分:2)
我想“ any”实际上是Mockito.any()方法吗?在这种情况下,您可以使用Mockito.matches(“ regex”)。查看文档:{{3}}
编辑:事实证明,MockRestServiceServer使用Hamcrest匹配器来验证期望值(诸如requestTo,withSuccess之类的方法)。
在 https://static.javadoc.io/org.mockito/mockito-core/1.9.5/org/mockito/Matchers.html#matches(java.lang.String) 类中还有一种方法 matchesPattern(java.util.regex.Pattern pattern) ,自Hamcrest 2开始可用,可以用来解决您的问题
但是在您的项目中,您可能依赖于旧版本的Hamcrest(1.3),例如,junit 4.12,最新的spring-boot-starter-test-2.13或最终使用的org。模拟服务器.mockserver-netty.3.10.8(可传递)。
因此,您需要:
<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));