如何在Spring的单元测试中模拟远程REST API?
2022-09-01 00:36:54
假设我已经在我的应用程序中创建了一个简单的客户端,该客户端使用远程Web服务,该服务在某些URI处公开了RESTful API。现在,我希望对调用此 Web 服务的客户端进行单元测试。/foo/bar/{baz}
理想情况下,在我的测试中,我想模拟我从Web服务获得的响应,给定一个特定的请求,如或。我的客户端假设API实际上正在某个地方运行,所以我需要一个本地的“Web服务”来开始运行我的测试。/foo/bar/123
/foo/bar/42
http://localhost:9090/foo/bar
我希望我的单元测试是独立的,类似于使用Spring MVC测试框架测试Spring控制器。
一些简单客户端的伪代码,从远程API获取数字:
// Initialization logic involving setting up mocking of remote API at
// http://localhost:9090/foo/bar
@Autowired
NumberClient numberClient // calls the API at http://localhost:9090/foo/bar
@Test
public void getNumber42() {
onRequest(mockAPI.get("/foo/bar/42")).thenRespond("{ \"number\" : 42 }");
assertEquals(42, numberClient.getNumber(42));
}
// ..
使用Spring有哪些替代方案?