Как я могу проверить содержимое тела POST с помощью MockWebServer?
У меня есть несколько модульных тестов, которые используют квадраты OkHttp
s 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"));