Java HTTP 服务单元测试 Mock 框架: WireMock

Microservice 越来越多, 如何在写 unit test 的时候简单易用的 mock 依赖的 HTTP 服务?

第一种方案: Unitils

Unitils 是写 Java 单元测试的神器, 简单易用, 童叟无欺.
比如如下代码就在单元测试中成功 mock 了一个依赖的 service:

public class MyServiceTest extends UnitilsJUnit4 {
 
    private Mock myServiceMock;
 
}

想伪造方法返回值也就一行代码的事儿:

myServiceMock.returns("a value").someMethod();

不仅仅 mock, Unitils 其他模块对 Java 的单元测试也是非常大的补充. 但如果我就是要测试 HTTP client 访问远程 server 的那段代码怎么办? 如何一行代码伪造远程 HTTP 服务?

神器: WireMock

简单实用 JUnit Rule 定义一个 Rule, 指定端口, 实用 stubFor 方法非常容易在8500端口启动了一个 HTTP Server 并且当 GET http://localhost:8500/v1/catalog/service/test_service 时返回 mock response here 字符串

    @Rule
    public WireMockRule wireMockRule = new WireMockRule(8500);

    @Before
    public void setUp() throws IOException {
        wireMockRule.resetMappings();
        stubFor(get(urlEqualTo("/v1/catalog/service/test_service"))
          .willReturn(aResponse().withBody("mock response here")));

    }

WireMock 不仅仅支持 HTTP 所有方法, 也支持 HTTPS 协议. 大赞.
-- EOF --

你可能感兴趣的:(Java HTTP 服务单元测试 Mock 框架: WireMock)