Mockito not stubbing, Error: Wanted but not invoked

Mockito not stubbing, Error: Wanted but not invoked

刚开始学习测试,决定从Junit 5 Jupiter和Mockito入手

我试图使用 Mockito 编写测试用例,但测试失败并出现错误 Wanted but not invoked:

我已经尝试了所有可能的注入模拟对象的方法

@Test 中的 verify() 方法验证模拟对象从未被调用过一次

代码如下:

@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 问题时,我了解到编写测试用例的主要 class 不应被模拟,据我所知,我不会在这里重复错误。

请让我知道我需要做哪些更改

你没有打电话给你的 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);
}