【问题标题】:Test with consecutive calls to MockWebServer连续调用 MockWebServer 进行测试
【发布时间】:2019-06-24 19:38:24
【问题描述】:

我正在为一个连续调用服务器的 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"));

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

此序列不适用于并行请求。

【问题讨论】:

    标签: android-espresso android-testing mockwebserver


    【解决方案1】:

    为了处理响应序列,我为我的 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);
    

    【讨论】:

    • 您可以为每个测试分配不同的调度员吗?
    • 每个服务器都有一个调度器。所以如果你想有很多调度器,你必须创建很多服务器,这不是最佳的。所以你应该找到一种方法来处理一个调度器中的多个响应。跨度>
    • 虽然很有可能找到一种方法在一个调度程序中处理所有测试,但另一种方法可能是在 BeforeEach 中实例化并关闭 mockwebserver,而不是在 BeforeAll 中。所以每个测试你有一台服务器,并且可以单独设置Dispatcher。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-27
    • 1970-01-01
    • 2021-06-15
    • 2021-01-13
    • 2010-11-04
    • 2020-09-21
    • 1970-01-01
    相关资源
    最近更新 更多