Есть ли причины делать модульный тест контроллера без @WebMvcTest?
Почти все источники которые мне приходилось читать пишут, что тест с аннотацией @WebMvcTest является интеграционным, не модульным. Какие есть причины создавать модульные тесты без этой аннотации, без MockMvc? Т.е. явно вызывая методы контроллера. Я так понимаю, основной аргумент в таком способе может быть только скорость выполнения теста, т.к. появляются неудобства, например, как именно в тесте использовать BindingResult.
Пример модульного теста, как мне это видится:
@ExtendWith(MockitoExtension.class)
class EmployeeControllerTest {
@Mock
private EmployeeService employeeService;
@Mock
private BeanPropertyBindingResult bindingResult;
@InjectMocks
private EmployeeController employeeController;
@SneakyThrows
@Test
public void givenEmployeeDTO_whenCreateEmployee_thenReturnIsCreated(){
// given
employeeController.setEmployeeModelMapper(new ModelMapper());
given(bindingResult.hasErrors()).willReturn(false);
var employeeId = 0;
var employeeDTO = EmployeeDTO.builder().id(employeeId).build();
// when
var result = employeeController.create(employeeDTO, bindingResult);
// then
assertThat(result.getStatusCode()).isEqualTo(HttpStatus.CREATED);
assertThat(result.getHeaders().getLocation().getPath()).isEqualTo("/employee/" + employeeId);
}
}