Параллельное выполнение тестов приводит к неправильному выводу Mosonserver

Я пишу тест для Activity, который выполняет несколько параллельных обращений к серверу. Мой MockWebServer смешивает последовательность откликов. Например, когда я делаю два параллельных запроса request1 и request2, он иногда возвращает Json request2 в ответ на request1 и Json request1 в ответ на request2. Как я могу указать, какой ответ MockWebServer должен возвращать на указанный запрос?

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

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

В документации говорится: "Ответ сценариев постановки в очередь должен быть возвращен на запрос, выполненный последовательно. Первый запрос обслуживается первым ответом, помещенным в очередь; второй запрос - вторым ответом, помещенным в очередь; и т. Д.".

Эта последовательность не работает в случае параллельных запросов.

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);
Другие вопросы по тегам