我有:
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。我可以像在Spring Mockrestserviceserver上一样编写自定义匹配器,将多个请求处理到同一URI(自动发现)
是否还有其他方法可以通过字符串模式制作mockServer.expect(requestTo(".*example.*"))
?
我想"任何"实际上是mockito.any()方法?在这种情况下,您可以使用Mockito.Matches(" Regex")。参见文档:https://static.javadoc.io/org.mockito/mockito-core/1.9.5/org/mockito/matchito/matchito/matcher.html#matches(java.lang.lang.string)
编辑:事实证明,oigrestserviceserver使用hamcrest匹配器来验证期望(诸如requestto,withsuccess等方法)。
也有一个方法 matchespattern(java.util.regex.pattern模式)用于解决您的问题。
但是,在您的项目中,您可能对较旧版本的Hamcrest(1.3)有依赖性,例如,Junit 4.12(最新的Spring-Boot-Starter-Starter-test-2.13)使用,或者最后是org。Mock-Server.mockserver-netty.3.10.8(过渡性)。
所以,您需要:
- 检查项目中的Hamcrest的实际版本,(如果不是2 )手动更新此依赖性:https://mvnrepository.com/artifact/org.hamcrest/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));