gpt4 book ai didi

java - 如何在MockRestServiceServer中按字符串模式期望requestTo?

转载 作者:行者123 更新时间:2023-12-01 14:17:32 25 4
gpt4 key购买 nike

我有以下测试:

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.*"))吗?

最佳答案

我想“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之类的方法)。

自Hamcrest 2起,在matchesPattern(java.util.regex.Pattern pattern)类中还有一个方法org/hamcrest/Matchers,该方法可用于解决您的问题。

但是在您的项目中,您可能依赖于旧版本的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));

    关于java - 如何在MockRestServiceServer中按字符串模式期望requestTo?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54745856/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com