Тестовые примеры Junit для вызовов rest api с лямбда-функциями

Рассмотрим метод вызова rest api, который внутренне использует лямбда-функции, как мы пишем тестовые примеры junit. Я попробовал себя, но не смог имитировать конструктор uri, который выражается как лямбда-функция в вызове post api. Также как смоделировать блок внутри flatMap. Фрагмент кода, для которого я пытаюсь написать модульный тест, приведен ниже.

public ResponseEntity<String> findEmployee(String empName, String empId) {

        response = employeeService.post.uri(builder -> builder.path(pathMapper.get("GET_PATH")).queryParam(EMP_ID, empId).build())
            .accept(APPLICATION.JSON)
            .syncBody(empName)
            .exchange()
            .flatMap( empResponse -> {
                LOGGER.info(empResponse.getStatusCode());
                return empResponse.toEntity(String.class);
            }).block();

            return response;
    }

Где employeeService - это объект Webclient. Любая помощь будет оценена по достоинству.


person das    schedule 07.11.2019    source источник


Ответы (1)


Друзья не разрешают друзьям издеваться над API-интерфейсами Fluent.

Лямбда встроена в строку, поэтому не может тестироваться индивидуально. Если вам это нужно, вы должны извлечь его в вызов метода, который можно протестировать.

  .flatMap( this::handleResponse )
  .block();
...
String handleResponse( Response empResponse ) {
  LOGGER.info(empResponse.getStatusCode());
  return empResponse.toEntity(String.class);
}

В более общем плане вы можете посмотреть что-то вроде Wiremock, которое устанавливает настроить локальный веб-сервер, который можно заполнить заданными тестовыми ответами.

person drekbour    schedule 07.11.2019