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:
我已经尝试了所有可能的注入模拟对象的方法
MockitoExtension
MockitoAnnotations#openMocks
Mockito#mock
@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);
}
刚开始学习测试,决定从Junit 5 Jupiter和Mockito入手
我试图使用 Mockito 编写测试用例,但测试失败并出现错误 Wanted but not invoked:
我已经尝试了所有可能的注入模拟对象的方法
MockitoExtension
MockitoAnnotations#openMocks
Mockito#mock
@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);
}