使用对MockWebServer的连续调用进行测试 [英] Test with consecutive calls to MockWebServer

查看:51
本文介绍了使用对MockWebServer的连续调用进行测试的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I am writing test for an Activity which makes several consecutive calls to server. My MockWebServer mixes sequence of responses.e.g. When I make two consecutive requests request1 and request2 it sometimes returns request2's Json in response to request1 and request1's Json in response to request2. How can I specify which response MockWebServer has to return to specified request?

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

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

在文档中,将入队脚本响应返回给依次提出的请求.第一个请求由第一个排队的响应服务;第二个排队响应中的第二个请求;等等."

In documentation it is said "Enqueue scripts response to be returned to a request made in sequence. The first request is served by the first enqueued response; the second request by the second enqueued response; and so on."

在并行请求的情况下,此序列不起作用.

This sequence doesn't work in case of parallel requests.

推荐答案

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

To handle the sequence of responses I have written a dispatcher for my MockServer instance. It receives a request, checks it's URL's endpoint and returns corresponding response

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);

这篇关于使用对MockWebServer的连续调用进行测试的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆