Весной я пишу тесты для моего контроллера покоя. И у меня есть два вопроса.
1. Это интеграционный или модульный тест?
2. Должен ли я проверить здесь аннотации валидации, такие как @NotNull
и @Valid
и другие? Если нет, как их отключить? Потому что, когда я передаю неверный json для отправки запроса, эти аннотации по умолчанию выдадут мне неверный запрос на ошибку.
Внешние зависимости, такие как сервисы, высмеиваются, а класс имеет @ExtendWith(SpringExtension.class)
@WebMvcTest(value = UserController.class, secure = false)
аннотаций.
@Test
void findByUsername_returnUser() throws Exception {
when(userService.findByUsername(USERNAME)).thenReturn(Optional.ofNullable(user));
when(converterContext.getConverter(ConverterShowUserDto.class)).thenReturn(converterShowUserDto);
when(converterShowUserDto.convert(user)).thenReturn(showUserDto);
this.mockMvc.perform(get("/user?username=" + USERNAME))
.andDo(print())
.andExpect(status()
.isOk())
.andExpect(jsonPath("$.username", is(USERNAME)));
}
Мой пример метода контроллера выглядит так:
@RequestMapping(value = "/{id}", method = RequestMethod.GET)
public ResponseEntity getById(@PathVariable(value = "id") @ExistAccountWithId int id) {
Optional<User> user = userService.findById(id);
ShowUserDto showUserDto = convert(user.get());
return new ResponseEntity<>(showUserDto, HttpStatus.OK);
}
Валидация основана только на пользовательских аннотациях, а исключения отслеживаются во всем мире. Поэтому у меня нет никакой проверки внутри методов контроллера. Они отделены друг от друга.