Всегда ли в MVC нужно выполнять verify() у замоканного слоя?
Если в MVC при модульном тестировании слоя Service мокается слой Repository то всегда ли нужно через verify() проверять , что выполнялся метод Repository?
@ExtendWith(MockitoExtension.class)
class EmployeeServiceTest {
@Mock
private EmployeeRepository employeeRepository;
@InjectMocks
private EmployeeService employeeService;
@Test
void givenEmployeeId_whenFindById_thenReturnEmployee() {
// given
var employeeId = 2;
var optionalEmployee = Optional.of(new Employee());
given(employeeRepository.findById(employeeId)).willReturn(optionalEmployee);
// when
var optionalFoundEmployee = employeeService.findById(employeeId);
// then
verify(employeeRepository).findById(employeeId);
assertThat(optionalFoundEmployee).isEqualTo(optionalEmployee);
}
}
Ответы (2 шт):
Не обязательно. Лучше проверить, чем не проверить. Но лучше уточнять в verify, сколько раз должен быть вызван метод.
Также рекомендую в "блоке" when сохранять результат вызова метода в переменную и потом её проверять в assertThat, а не вызывать findById() несколько раз
Как правило, проверять что метод вызвался, не следует.
Во первых, за вас это делает Mockito. Если вы замокаете метод, но в тесте его не вызовете - Mockito выбросит исключение.
Во вторых, как правило, verify применяется тогда, когда нужно проверить количество вызовов метода. Например у вас есть кеш. Первый раз вы вызвали метод - значение закешировалось. Вызвали второй - значение было использовано из кеша. В этом случае имеет смысл вызвать verify и проверить, что метод отработал только 1 раз.
Так же бывают случаи, когда необходимо проверить, что метод был вызван при определенных условиях, например:
Object aMethod() {
...
if(condition) aObject.doSomething()
...
}
В этом случае тоже имеет смысл проверить, что метод doSomething() отработал или неотработал.