Mockito не заглушается, Ошибка: Требуется, но не вызывается

#java #unit-testing #mockito #junit5

Вопрос:

Я только начал изучать тестирование и решил начать с Junit 5 Jupiter и Mockito

Я пытался написать тестовый случай с помощью Mockito, но тест не удался с ошибкой, которую хотели, но не вызвали:

Я перепробовал все возможные способы введения фиктивных объектов

  • Насмешливое растяжение
  • MockitoAnnotations#openMocks
  • Издевательски#издевательски

verify() Метод в @Test проверяет, что макет объекта никогда не вызывался ни разу

Вот код:

 @ExtendWith(MockitoExtension.class)
public class UserInfoServiceTest {

    @Mock
    private UserInfoRepository userInfoRepository;

    @InjectMocks
    private UserInfoServiceImpl userInfoService;

    @Test
    public void shouldReturnUserInfo_whenIdIsGiven() throws Exception {
        Optional<UserInfo> userInfo = Optional.of(UserInfo.builder().email("xyz@abc.com").build());

        when(userInfoRepository.getUserInfoById(1L)).thenReturn(userInfo);

        verify(userInfoRepository).getUserInfoById(1L);
        assertEquals(userInfo,userInfoService.getUserInfo(1L));
    }
}
 

Обращаясь к другим подобным вопросам SO, я узнал, что основной класс, для которого написаны тестовые примеры, не должен подвергаться насмешкам, и, насколько мне известно, я не повторяю здесь ошибку.

Пожалуйста, дайте мне знать, какие изменения мне нужно внести

Ответ №1:

Ты не позвонил своему userInfoService . Вы должны сделать это раньше verify :

 @Test
public void shouldReturnUserInfo_whenIdIsGiven() throws Exception{
    Optional<UserInfo> userInfo = Optional.of(UserInfo.builder().email("xyz@abc.com").build());
    when(userInfoRepository.getUserInfoById(1L)).thenReturn(userInfo);

    UserInfo result = userInfoService.getUserInfo(1L);

    verify(userInfoRepository).getUserInfoById(1L);
    assertEquals(userInfo, result);
}