Как проверить параметры метода с помощью Mockito? - PullRequest
2 голосов
/ 22 сентября 2019

Я должен проверить параметр пути, чтобы он содержал только цифры, используя Mockito.

Мой код:

@Slf4j
@Validated
public class TestController {
    private final TestService service;

@GetMapping("/path/{Id}")
    public ResponseEntity process(@Valid @Pattern(regexp = "\\d+", message =
        "Id should be only digits") (message = "Id is required")
                                                             @PathVariable("Id")
                                                                 String customerAccountId){
       service.processRequest(Id);
        return ResponseEntity.status(HttpStatus.NO_CONTENT).build();
    }
}

Я добавил совет контроллера, чтобы перехватить исключение


@Slf4j
@RestControllerAdvice
public class ControllerAdviser extends ResponseEntityExceptionHandler {
@ExceptionHandler(ConstraintViolationException.class)
    protected ResponseEntity<Object> handleConstraintViolationException(
        ConstraintViolationException ex, WebRequest request) {
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON_UTF8);

        Map errorMap = error(ex.getConstraintViolations()
            .stream()
            .map(ConstraintViolation::getMessage)
            .collect(Collectors.toList()));

        ErrorModel errorModel = ErrorModel.builder()
            .userMessage("Input request parameters are invalid")
            .developerMessage(errorMap.toString())
            .statusCode(BAD_REQUEST.value())
            .build();

        return handleExceptionInternal(ex, errorModel, headers, BAD_REQUEST, request);
    }
   ......
}

Ниже приведена моя попытка написания проверочного теста, который не прошел:


@Test
    public void shouldReturnBadRequestWhenIDoesntContainDigits() throws Exception {

 MockMvc mockMvc = standaloneSetup(new TestController(service))
            .build();
        String END_ENDPOINT = "/path/45673423dddd";

        ResultActions resultActions = this.mockMvc
            .perform(get(END_ENDPOINT)
                .contentType(MediaType.APPLICATION_JSON)
                .accept(MediaType.APPLICATION_JSON));
        System.out.println(resultActions.andReturn());

        resultActions
            .andDo(print())
            .andExpect(status().isBadRequest());
    }

java.lang.AssertionError: Status 
Expected :400
Actual   :204
<Click to see difference>

Что я делаю не так, что этот тест не пройден?Не могли бы вы посоветовать мне, как проверить мой случай?

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