Mock терпит неудачу в условии If

В моем контроллере я выполняю проверку в блоке 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 и выдает исключение, игнорируя издевательское поведение.

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

JB Nizet 21.03.2019 13:56

но я издевался над поведением проверки, чтобы всегда возвращать true, т.е. действительно. Поэтому независимо от того, какой объект я передаю, он должен возвращать true.

Pankaj Kumar 21.03.2019 14:14

у меня есть ответ, это просто изменение строки when(validator.isValidMandateRequestObject(any(MandateReques‌​t.class))).thenRetur‌​n(true);

Pankaj Kumar 21.03.2019 14:52
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
3
32
0

Другие вопросы по теме