Создать тест для метода пост пост, используя макет объекта - PullRequest
0 голосов
/ 27 апреля 2018

У меня есть метод post в контроллере rest, и я хочу создать тест для этого метода: Это мой метод:

@PostMapping("/persons")
public ResponseEntity<PersonDto> createPerson(@RequestBody PersonDto personDto) {
    try {
        personService.createPerson(personDto);
        return ResponseEntity.ok(personDto);
    } catch (Exception e) {
        return ResponseEntity.badRequest().build();
    }
}

Понятия не имею, как должен выглядеть этот тест с макетом.

Ответы [ 2 ]

0 голосов
/ 27 апреля 2018

У меня уже есть тест для удаления метода. Да, я использую springboot, jpa, rest, h2:

@Test
public void shouldDeletePersonById() throws Exception {
    Mockito.doCallRealMethod().when(personService).deleteById(1L);
    mockMvc.perform(delete("/persons/{id}", 1L)
            .accept(MediaType.APPLICATION_JSON))
            .andExpect(status().isNotFound());
}

Но для создания человека это выглядит очень тяжело для меня. Я не знаю, что мне следует вызывать в методе posy (например, при удалении я вызываю id, чтобы найти то, что я хочу удалить).

0 голосов
/ 27 апреля 2018

Когда вы используете Spring, я рекомендую вам использовать @WebMvcTest, чтобы высмеивать все, кроме тестируемого контроллера.
Вы должны так явно издеваться над зависимостями этого контроллера. В вашем случае достаточно насмешки над полем personService.
В вашем тестовом классе объявите поле personService, помеченное @MockBean, чтобы создать макет Mockito для класса, который будет добавлен в контекст Spring.
Затем запишите поведение для этого макета.
У вас есть две ветви здесь: это работает, и исключение возникает. Таким образом, вы можете определить два метода тестирования и записать определенное поведение в каждом из них.
Наконец подтвердите полученный ответ от контроллера.

...