Java:在单元测试中模拟http/https调用

Java:在单元测试中模拟http/https调用,java,unit-testing,junit,powermock,wiremock,Java,Unit Testing,Junit,Powermock,Wiremock,我试图在我的代码中设置单元测试,其中我想模拟到外部web服务的rest调用。我知道两种方法: 存根使用PowerMock调用外部webservice以返回模拟响应对象的方法 对于单元测试,将web服务的主机地址更改为指向localhost,然后使用WireMock连接到localhost并发送响应 我想做的是不改变(2)中的主机地址,让WireMock(或任何其他第三方库)截获对给定主机的调用,并根据调用发送响应 换句话说,我希望以这样一种方式配置WireMock:例如,如果我的代码正在调用Wi

我试图在我的代码中设置单元测试,其中我想模拟到外部web服务的rest调用。我知道两种方法:

  • 存根使用PowerMock调用外部webservice以返回模拟响应对象的方法

  • 对于单元测试,将web服务的主机地址更改为指向localhost,然后使用WireMock连接到localhost并发送响应

  • 我想做的是不改变(2)中的主机地址,让WireMock(或任何其他第三方库)截获对给定主机的调用,并根据调用发送响应


    换句话说,我希望以这样一种方式配置WireMock:例如,如果我的代码正在调用WireMock,那么WireMock将拦截该调用,并使用我配置的东西进行响应。(基本上是stub www.google.com)。

    不幸的是,WireMock无法做到这一点

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

  • 使用,将自身配置为Java HTTP客户端的代理,或
  • 修改主机文件,使其指向127.0.0.1,例如www.google.com
  • 如果您使用的是ApacheHTTPClient 4.2+,那么可以实现一个自定义的方法,将您使用的主机名绑定到127.0.0.1

  • 谢谢Tom,让我尝试一下,然后再回到这个线程:)为提示喝彩Tom,我已经使用方法3实现了这一点。Tom-是否有某种方法可以重定向到端口,以便端口80的请求也转到wiremock端口?您可以使用
    --port
    CLI参数在端口80上运行wiremock(如果您使用的是Unix风格的操作系统,则需要
    sudo
    此选项)。或者,如果您运行的是Linux,则可以使用IPTables转发端口,如果您不想以root用户身份运行WireMock,这是一个不错的选项。