#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);
}