В моем контроллере я выполняю проверку валидации в блоке if
с использованием класса валидатора.
Поскольку код валидации еще не завершен, я просто хочу проверить, что, если валидация прошла успешно, ответ должен быть201 (успех).
Для этого я высмеиваю поведение объекта-валидатора, возвращая true
, то есть его действительность.
Проблема в том, что даже если я высмеял поведение объекта-валидатора, чтобы невведите блок if
, чтобы он не генерировал исключение проверки, это фактически ввод и исключение.Это означает, что насмешка не сработала.Я знаю, что плохо предполагать реализацию метода для тестирования, но я хочу знать, почему он не работает.
myController.class
@RestController
@RequestMapping("/v1/api")
public class myController {
@Autowired
private RequestService requestService;
@Autowired
RequestValidator validator;
@PostMapping(value = "")
@ResponseStatus(code = HttpStatus.CREATED)
public @ResponseBody
BaseResponse<Response> create(@RequestBody Request<Data> request){
if(!validator.isValidRequestObject(request))
{
throw new RuntimeException("invalid request");
}
Response data = requestService.submitData(request);
BaseResponse<Response> response = new BaseResponse<Response>();
response.setData(data);
response.setMessage("Created Successfully");
return response;
}
ControllerTest.class
@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class ControllerTest {
@Autowired
private MockMvc mockMvc;
@Autowired
Request<Data> request;
@MockBean
RequestService service;
@MockBean
RequestValidator validator;
ObjectMapper mapper = new ObjectMapper();
@Test
public void createTest() throws Exception {
when(validator.isValidRequestObject(request)).thenReturn(true);
when(service.submitData(request)).thenReturn(null);
this.mockMvc.perform(post("/v1/api")
.content(mapper.writeValueAsString(request))
.contentType(MediaType.APPLICATION_JSON))
.andExpect(status().isCreated());
}
Если я удалю строку throw new exception
, тест пройден.я предполагаю, что, поскольку я высмеял validator
поведение в myController
, он не должен входить в блок и, следовательно, не генерировать исключение.Но он входит в блок if
и вызывает исключение, игнорирующее насмешливое поведение.