连续调用MockWebServer进行测试

时间:2019-01-31 10:54:09

标签: android-espresso android-testing mockwebserver

我正在编写一个Activity的测试,该测试连续多次调用服务器。 我的MockWebServer混合了响应序列,例如当我发出两个连续的请求request1和request2时,有时会返回request2的Json以响应request1,并返回request1的Json以响应request2。 如何指定MockWebServer必须返回到指定请求的响应?

server.enqueue(new MockResponse()
                .setResponseCode(200)
                .setBody(readFromFile("response1 path"));

server.enqueue(new MockResponse()
                .setResponseCode(200)
                .setBody(readFromFile("response2 path"));

在文档中说:“排队脚本响应返回到顺序发出的请求。第一个请求由第一个排队的响应服务;第二个请求由第二个排队的响应服务,依此类推。”

在并行请求的情况下,此序列无效。

1 个答案:

答案 0 :(得分:0)

为处理响应顺序,我为MockServer实例编写了一个调度程序。 它收到一个请求,检查它的URL端点并返回相应的响应

    Dispatcher mDispatcher = new Dispatcher(){
        @Override
        public MockResponse dispatch(RecordedRequest request) {
              if (request.getPath().contains("/request1")) {
                  return new MockResponse().setBody("reponse1");
             }
             if (request.getPath().contains("/request2")) {
                  return new MockResponse().setBody("reponse2");
             }
                return new MockResponse().setResponseCode(404);
           }
         }

     mMockServer.setDispatcher(mDispatcher);