为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

桃花长相依 2022-06-23 20:12:26
我有测试: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.*"))通过字符串模式制作?
查看完整描述

1 回答

?
侃侃无极

TA贡献2051条经验 获得超10个赞

我想“任何”实际上是一个 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>

    <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));


查看完整回答
反对 回复 2022-06-23
  • 1 回答
  • 0 关注
  • 144 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信