如何在 Java 的同一测试中模拟具有多个端点的 REST 服务器



我正在尝试测试一种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());
  }

依赖于抽象,而不是具体的实现。

相关内容

  • 没有找到相关文章

最新更新