WireMock - заглушка GET с телом не работает, в то время как заглушка POST работает правильно

При попытке протестировать класс Client заглушка вызовов POST работает правильно, а GET — нет. Что я здесь делаю не так/не правильно понимаю?

Код клиента (POST):

HttpResponse httpResponse = new DefaultHttpRequestBuilder(HttpMethod.POST, SERVICE_URL_GET_MAGIC)
                .withBody(parseMagic(magicName))
                .execute();

С заглушкой (POST):

stubFor(post(urlEqualTo("/api/get-magic"))
        .withRequestBody(equalToJson(magicNameParsed))
        .willReturn(aResponse()
                .withHeader("Content-Type", "application/json")
                .withBody(magicDtoParsed)));

Работает правильно (httpResponse будет 200 OK).

При использовании GET вызов API не прерывается (httpResponse будет 404 Not found).

HttpResponse httpResponse = new DefaultHttpRequestBuilder(HttpMethod.GET, SERVICE_URL_GET_MAGIC)
                    .withBody(parseMagic(magicName))
                    .execute();

stubFor(get(urlEqualTo("/api/get-magic"))
        .withRequestBody(equalToJson(magicNameParsed))
        .willReturn(aResponse()
                .withHeader("Content-Type", "application/json")
                .withBody(magicDtoParsed)));

person Johnny    schedule 16.08.2015    source источник


Ответы (1)


Я думаю, проблема в том, что вы ожидаете «тело» в своем запросе на получение, но у запросов на получение не может быть тела (только запросы PUT и POST могут иметь тело).

попробуйте сделать следующее

stubFor(get(urlEqualTo("/api/get-magic"))
        .willReturn(aResponse()
                .withHeader("Content-Type", "application/json")
                .withBody(magicDtoParsed)));

Обратите внимание, что я удалил строку .withRequestBody(equalToJson(magicNameParsed))

Кстати. Поножовщина - это когда вы используете нож или острый предмет, чтобы ранить кого-то / что-то. Заглушка — это слово, которое вы хотите использовать, когда говорите о тестировании контекста :)

person Augusto    schedule 16.08.2015
comment
Извините за stAbbing, он показал мне автокоррекцию, и я просто следовал за ней :), буду редактировать. Что касается тела в запросе GET, я подумал об этом и в конце концов обнаружил, что это ok http://stackoverflow.com/questions/978061/http-get-with-request-body и мой клиент действительно ожидает этого. - person Johnny; 16.08.2015
comment
Ничего себе, не знал, что это разрешено ... но, как люди упоминали там, это плохая идея, и в конечном итоге будет упомянуто, что это не разрешено. Мое предложение было бы таким: делайте это правильно и избавьтесь от необходимости иметь тело. Лично я из нескольких сотен API, которыми я пользовался, ни разу не видел GET-запроса, требующего тела. - person Augusto; 16.08.2015
comment
Ага. Никаких примеров GET с содержимым тела. Хотя это нормально, как упоминается в ссылке в предыдущем посте, я буду использовать POST для своих нужд. Спасибо. - person Johnny; 16.08.2015