Всегда ли в 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 шт):

Автор решения: Igor

Не обязательно. Лучше проверить, чем не проверить. Но лучше уточнять в verify, сколько раз должен быть вызван метод.

Также рекомендую в "блоке" when сохранять результат вызова метода в переменную и потом её проверять в assertThat, а не вызывать findById() несколько раз

→ Ссылка
Автор решения: aleshka-batman

Как правило, проверять что метод вызвался, не следует.

Во первых, за вас это делает Mockito. Если вы замокаете метод, но в тесте его не вызовете - Mockito выбросит исключение.

Во вторых, как правило, verify применяется тогда, когда нужно проверить количество вызовов метода. Например у вас есть кеш. Первый раз вы вызвали метод - значение закешировалось. Вызвали второй - значение было использовано из кеша. В этом случае имеет смысл вызвать verify и проверить, что метод отработал только 1 раз.

Так же бывают случаи, когда необходимо проверить, что метод был вызван при определенных условиях, например:

Object aMethod() {
...
if(condition) aObject.doSomething()
...
}

В этом случае тоже имеет смысл проверить, что метод doSomething() отработал или неотработал.

→ Ссылка