我正在尝试测试一种Java方法,该方法向远程REST服务器发出请求以检索一些JSON数据,从该JSON中提取ID,然后使用该ID向不同端点的同一服务器发出另一个请求。
使用 Mockito 的 MockRestServiceServer,我可以成功地模拟和测试期望向一个端点发出单个请求的服务器,但似乎我不能使用它来创建具有一组预定义端点的服务器,这些端点具有自己的期望和响应。
如何模拟具有多个端点的服务器,以测试向远程服务器发出多个不同请求的单个函数?
所以我实际上能够解决我的问题。诀窍是手动创建自己的MockRestServiceServerBuilder来构建MockRestServiceServer,而不是使用createServer(RestTemplate(或bindTo(RestTemplate(.build((方法,如下所示:
MockRestServiceServer.MockRestServiceServerBuilder builder =
MockRestServiceServer.bindTo(restTemplate);
builder.ignoreExpectOrder(true);
MockRestServiceServer server = builder.build();
通过这样做,MockRestServiceServer 中的基础 RequestExpectationManager 字段被初始化为 UnorderedRequestExpectationManager,允许您匹配请求,而不管它们的顺序如何。这为我解决了很多头痛的问题。
我的回答假设你正在使用SpringBoot,但这个想法可以普遍应用。
使类依赖于 RestOperations 接口,以便在测试时传递存根。
被测类
public class Foo {
private final RestOperations restOperations;
public Foo(RestOperations restOperations) {
this.restOperations = restOperations;
}
}
测试
public void test() {
Foo foo = new Foo(new MyStub());
}
依赖于抽象,而不是具体的实现。