如何使用Mockito验证方法参数?

时间:2019-09-22 19:02:44

标签: java spring mockito

我必须使用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>

我在做什么错,这个测试用例失败了吗?您能建议我如何测试我的案子吗?

0 个答案:

没有答案