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

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

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

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

Другие вопросы по тегам