В моем контроллере я выполняю проверку в блоке if, используя класс валидатора.
Поскольку код проверки еще не завершен, я просто хочу проверить, если проверка прошла успешно, ответ должен быть 201 (успех).
Для этого я издеваюсь над поведением возвращаемого объекта валидатора true
то есть он действителен.
Проблема в том, что даже если я издевался над поведением объекта валидатора, чтобы он не входил в блок if, чтобы он не выдавал исключение проверки, он фактически вводил и выдавал исключение. Это означает, что насмешка не сработала. Я знаю, что плохо предполагать реализацию метода для тестирования, но я хочу знать, почему он не работает.
мойконтроллер.класс
@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.класс
@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 и, следовательно, не вызывать исключение.
Но он входит в блок if и выдает исключение, игнорируя издевательское поведение.
но я издевался над поведением проверки, чтобы всегда возвращать true, т.е. действительно. Поэтому независимо от того, какой объект я передаю, он должен возвращать true.
у меня есть ответ, это просто изменение строки when(validator.isValidMandateRequestObject(any(MandateRequest.class))).thenReturn(true);





Запрос, который вы сериализуете, и запрос, переданный валидатору после десериализации, скорее всего, не равны.