Модульное тестирование тела запроса POST при использовании WebClient - PullRequest
0 голосов
/ 17 марта 2020

Ниже приведен фрагмент моего кода, который отправляет многочастный запрос к серверу. Исходя из некоторых условий, он решает опубликовать только один файл или оба.

// Based on some condition add 1 or 2 files to the multipart body
MultiValueMap<String, Object> parts = new LinkedMultiValueMap<>();
if (postBothFiles) {
    parts.add("File_ONE", new FileSystemResource(file1));
}
parts.add("File_TWO", new FileSystemResource(file2));


// Perform the post request adding `parts` to the body
webClient.post().uri("/postUrl")
                .contentType(MULTIPART_FORM_DATA)
                .body(BodyInserters.fromMultipartData(parts))
                .retrieve()
                .bodyToMono(String.class)
                .block();

Во время модульного теста я хочу проверить, правильно ли работает условие. Для этого я хочу проверить, есть ли в теле запроса два файла или только один.

Я пытался использовать ExchangeFilterFunction, однако он не позволяет мне читать содержимое тела.

Каков наилучший способ модульного тестирования таких запросов POST?

1 Ответ

1 голос
/ 17 марта 2020

Я думаю, у вас есть 2 варианта.

  1. сделать шпиона из BodyInserters.fromMultipartData, используя PowerMock. PowerMock может составить spy / mock для метода c.
  2. рассмотрите возможность использования okhttp / mockwebserver (https://github.com/square/okhttp/tree/master/mockwebserver#recordedrequest). Он может записывать тело запроса, как показано ниже.
MockWebServer server = new MockWebServer();
RecordedRequest request = server.takeRequest();
assertEquals("{}", request.getBody().readUtf8());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...