Я ищу способ протестировать метод, который отправляет запрос 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;
}
}
Я надеюсь, что смогу немного прояснить свой вопрос.