Как я могу проверить содержимое тела POST с помощью MockWebServer?

У меня есть несколько модульных тестов, которые используют Squares OkHttps MockWebServer. Тесты проходят нормально, все работает очень хорошо. Единственное, что я пока не смог сделать, это проверить содержимое POST-запросов.

Почему я хочу это сделать?
REST API, для которого я разрабатываю, имеет некоторые методы, которые требуют, чтобы объекты данных отправлялись в теле запроса POST, другие методы требуют, чтобы объекты были отправлены как FormUrlEncoded данные поле. Поэтому я хочу убедиться, что интерфейс Retrofit был настроен правильно в соотв. к спец.

Следующий юнит-тест пройдёт, но первый неправильно отправляет данные внутри тела:

//Incorrect
@POST("api/v1/user/senddata")
Observable<Void> senddata (
        @Path("VIN") String vin,
        @Body PoiWrapper wrappedPoi);

//Correct
@FormUrlEncoded
@POST("api/v1/user/senddata")
Observable<Void> senddata(
        @Path("VIN") String vin,
        @Field("data") PoiWrapper wrappedPoi);

Я знаю, что у MockWebServer есть метод takeRequest(), но я застрял с получением фактического поля и данных из тела этого запроса.

Спасибо за помощь!


person ASP    schedule 22.07.2016    source источник


Ответы (1)


Попробуйте выполнить эти примеры:

RecordedRequest recordedRequest = server.takeRequest();
assertEquals("POST", recordedRequest.getMethod());
assertEquals("def", recordedRequest.getBody().readUtf8());
assertEquals("3", recordedRequest.getHeader("Content-Length"));
assertEquals("text/plain; charset=utf-8", recordedRequest.getHeader("Content-Type"));
person Jesse Wilson    schedule 22.07.2016
comment
Хорошо, это не 100% решение моей проблемы, но это подтолкнуло меня в правильном направлении. readUtf8() возвращает тело с полями формы в кодировке HTML. Мне все еще нужно декодировать строку, десериализовать ее в Map, а затем проверить ключи и значения. - person ASP; 25.07.2016