Как проверить метод POSTing с помощью встроенного веб-сервера в Springboot? - PullRequest
0 голосов
/ 04 июля 2019

Я ищу способ протестировать метод, который отправляет запрос POST во внешнюю службу. Приложение НЕ будет само по себе расходуемым веб-сервисом, поэтому я не реализовал показанный ниже класс как @RestController, @Controller, @Service, какие бы там ни были типы.

Но я не знаю, как вызвать метод postNumberPlate(), чтобы отправить запрос на встроенный веб-сервер (запущенный в / by / на модульном тесте), чтобы сделать некоторые утверждения на нем. Я хочу избежать установки внешнего веб-сервера.

Другими словами: можно ли запустить встроенный веб-сервер в модульном тесте и «сказать» ему принять мой запрос POST для проверки и подтверждения содержимого?

Я уже сделал:

  • массивный веб-поиск (2-3 дня?)
  • прочитайте Howto's
  • проверьте документы по Springboot
  • использовать встроенный Jetty Server (каким-то образом блокирующий цикл)
  • объявить приложение веб-приложением и установить случайный порт в Jetty
  • эксперимент с Mockito, MockMVC
  • прочитал " Как выполнить юнит-тестирование класса с помощью RestTemplate в автономном режиме? " и сравнил его с моим случаем, но нашел,
    • что он очень старый (8лет),
    • Я не знаю, как реализовать родительский интерфейс, который довольно большой
    • что вопрос и ответы слишком общие, чтобы вывести решение для моего случая
    • это не отвечает на проблему встроенного веб-сервера тестирования, которую я включил.

Класс для тестирования:

public class RestfulClient {

    private RestTemplate restTemplate = new RestTemplate();
    private HttpHeaders headers = new HttpHeaders();

    @Value("${kafkaeskadapter.uri}")
    private String destinationURL;

    public RestfulClient() {}

    public ResponseEntity<String> postNumberPlate(String key, CamImage camImage) {

        LinkedMultiValueMap<String, Object> map = new LinkedMultiValueMap<>();
        map.add("numplate", camImage.getIdentifier());
        headers.setContentType(MediaType.MULTIPART_FORM_DATA);

        HttpEntity<LinkedMultiValueMap<String, Object>> requestEntity = new HttpEntity<LinkedMultiValueMap<String,
                Object>>(map, headers);

        ByteArrayResource resource = new ByteArrayResource(camImage.getData()) {
            /**
             * IMPORTANT!!! Otherwise I receive a BAD REQUEST
             * @return
             */
            @Override
            public String getFilename() {
                return camImage.getIdentifier() + ".png";
            }
        };
        map.add("image", resource);

        ResponseEntity<String> result = restTemplate.exchange(destinationURL, HttpMethod.POST,
                requestEntity, String.class);

        return result;
    }
}

Я надеюсь, что смогу немного прояснить свой вопрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...