2016-07-22 6 views
2

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

Почему я хочу это сделать?
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(), но я застрял с получением фактического поля и данные из этого запрашивающего органа.

Благодарим за помощь!

ответ

2

Попробуйте следующие these examples:

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

+2

Хорошо, что это не 100% решение моей проблемы, но он толкнул меня в правильном направлении. 'ReadUtf8()' возвращает тело с полями кодированной HTML-формы. Мне еще нужно декодировать String, десериализовать его на «Карта», а затем проверить ключи и значения. – ASP

Смежные вопросы