如何在 MockRestServiceServer 中通过字符串模式期待 requestTo?

我有测试:


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.*"))通过字符串模式制作?


桃花长相依
浏览 145回答 1
1回答

侃侃无极

我想“任何”实际上是一个 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 等方法)。org/hamcrest/Matchers类中还有一个方法matchesPattern(java.util.regex.Pattern pattern),自 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>&nbsp; &nbsp; <groupId>org.hamcrest</groupId>&nbsp; &nbsp; <artifactId>hamcrest</artifactId>&nbsp; &nbsp; <version>2.1</version>&nbsp; &nbsp; <scope>test</scope></dependency>更新您的测试:mockServer.expect(requestTo(matchesPattern(".*exact-example-url.com.*")))&nbsp; &nbsp; .andExpect(method(HttpMethod.GET))&nbsp; &nbsp; .andRespond(withSuccess("response", MediaType.APPLICATION_JSON));
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java