具有硬编码 url 的 API 客户端的 Wiremock 存根

Wiremock stubs for an API client that has hardcoded urls

我正在尝试使用线控测试来测试一个小型服务。

我可以删除大部分第三方服务 URL 但是我 运行 在使用其 sanbox URL 硬编码的客户端库时遇到问题。

当前示例适用于 Braintree。
我想存根一个 return 来调用“https://api.sandbox.braintreegateway.com:443” 我无法在测试属性中覆盖该值。

(硬编码参考 https://github.com/braintree/braintree_java/blob/9f619bb0dd019921caed1f344046078469fbf1f8/src/main/java/com/braintreegateway/Environment.java

有没有一种方法可以配置 wiremock 以识别对 https://api.sandbox.braintreegateway.com 的调用:和 return 存根响应?

我从未使用过 Braintree SDK,但据我所知,您通过向 BraintreeGateway 对象提供 Environment 来使用它:https://github.com/braintree/braintree_java/tree/master#quick-start-example

我会创建一个包含 Wiremock URL 的专用测试 Environment 实例,并在我的集成测试中将其提供给 BraintreeGateway

假设 Braintree 库中的 HTTP 客户端尊重 Java 的代理设置系统属性,您可以将 WireMock 配置为转发代理(或浏览器代理,如 WireMock 的文档所称),允许它拦截调用任何外部域。

本文档解释了如何使用新的代理配置器实用程序 class 执行此操作:http://wiremock.org/docs/multi-domain-mocking/

基本上你想做这样的事情:

JvmProxyConfigurer.configureFor(wireMockServer);

 wireMockServer.stubFor(get("/stuff")
    .withHost(equalTo("api.sandbox.braintreegateway.com"))
    .willReturn(okJson("{ ... }")));

// Test something that uses the Braintree client lib