【问题标题】:Java: Mocking http/https calls in unit testJava:在单元测试中模拟 http/https 调用
【发布时间】:2014-08-04 18:18:52
【问题描述】:

我正在尝试在我的代码中设置单元测试,我想在其中模拟其余调用到外部 Web 服务。我知道有几种方法可以做到这一点:

  1. 使用 PowerMock 将调用外部 Web 服务的方法存根以返回模拟响应对象。

  2. 对于单元测试,将 Web 服务的主机地址更改为指向 localhost,然后使用 WireMock 附加到 localhost 并发送响应。

我想要做的不是更改 (2) 中的主机地址,而是让 WireMock(或任何其他第三方库)拦截对给定主机的调用并根据调用发出响应。

换句话说,我想以这样一种方式配置 WireMock,如果我的代码正在调用例如 http://www.google.com,那么 WireMock 将拦截该调用并以我配置的内容进行响应。 (基本上是存根 www.google.com)。

【问题讨论】:

    标签: java unit-testing junit powermock wiremock


    【解决方案1】:

    很遗憾,WireMock 无法做到这一点。

    你有三个选择(我能想到的):

    1. 使用 BetaMax,它将自己配置为 Java HTTP 客户端的代理,或者
    2. 修改您的主机文件以指向例如www.google.com 到 127.0.0.1
    3. 如果您使用的是 Apache HTTP 客户端 4.2+,则可以实现自定义 DnsResolver 以将您使用的主机名绑定到 127.0.0.1。

    【讨论】:

    • 谢谢汤姆,让我试试看,我会回到这个线程:)
    • 为汤姆的提示干杯,我已经使用方法 3 来实现这一点。
    • Tom - 有什么方法可以重定向到端口,以便对端口 80 的请求转到wiremock 端口?
    • 您可以使用--port CLI 参数在端口80 上运行WireMock(如果您使用的是Unix 风格的操作系统,则需要sudo)。
    • 另外,如果您运行的是 Linux,您可以使用 IPTables 转发端口,如果您不想以 root 身份运行 WireMock,这是一个不错的选择。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-05
    相关资源
    最近更新 更多