Java Тест для Spring ExceptionalHandler - PullRequest
0 голосов
/ 13 февраля 2020

У меня есть проект springboot с контроллерами и сервисами. И GlobalExceptionHandler, как -

public class GlobalExceptionHandler extends ResponseEntityExceptionHandler {
 @ExceptionHandler(DataIntegrityViolationException.class)
  public ResponseEntity<Object> handle(DataIntegrityViolationException e, WebRequest request) {
    ....

     String requestPath = ((ServletWebRequest)request).getRequest().getRequestURI();

    // I am using this requestPath in my output from springboot
   ...

  }
}

Может кто-нибудь, пожалуйста, скажите мне, как написать макет этого в моем классе модульного теста ((ServletWebRequest)request).getRequest().getRequestURI()

1 Ответ

1 голос
/ 13 февраля 2020

К сожалению, нет поддержки для подстановки финальных методов в Mockito. Вы можете использовать другой фреймворк, такой как PowerMock.

Я предпочитаю в этом случае исключать необходимость насмешки с помощью защищенного метода:

public class GlobalExceptionHandler extends ResponseEntityExceptionHandler {

    @ExceptionHandler(DataIntegrityViolationException.class)
    public ResponseEntity<Object> handle(final DataIntegrityViolationException e, final WebRequest request) {

        final String requestPath = getRequestUri(request);

        return ResponseEntity.ok().body(requestPath);
    }

    protected String getRequestUri(final WebRequest request) {
        return ((ServletWebRequest) request).getRequest().getRequestURI();
    }
}

И анонимного класса в тесте:

public class GlobalExceptionHandlerTests {

    private final GlobalExceptionHandler handler = new GlobalExceptionHandler() {
        @Override
        protected String getRequestUri(final org.springframework.web.context.request.WebRequest request) {
            return "http://localhost.me";
        };
    };

    @Test
    void test() throws Exception {

        final ResponseEntity<Object> handled = handler.handle(new DataIntegrityViolationException(""),
                null);
        assertEquals("http://localhost.me", handled.getBody());
    }
}
...