Microservice 越来越多, 如何在写 unit test 的时候简单易用的 mock 依赖的 HTTP 服务?
第一种方案: Unitils
Unitils 是写 Java 单元测试的神器, 简单易用, 童叟无欺.
比如如下代码就在单元测试中成功 mock 了一个依赖的 service:
public class MyServiceTest extends UnitilsJUnit4 {
private Mock<MyService> 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 --