方法 Mockito.when().thenReturn() 和 Mockito.doreturn().when() 不返回指定的模拟值
Method Mockito.when().thenReturn() and Mockito.doreturn().when() not returning specified mock value
@InjectMocks
private UserServiceImpl userService;
@Mock
private UserRepository mockUserRepository;
//private UserServiceImpl userServiceImpl;
@Before
public void initMocks() throws Exception {
MockitoAnnotations.initMocks(this);
mockUserRepository = Mockito.mock(UserRepository.class);
}
@Test
public void testCreateUser() {
User user = createUser();
Mockito.doReturn(user).when(mockUserRepository).findByEmail(user.getEmail());
Mockito.when(mockUserRepository.save(user)).thenReturn(user);
userService.createUser(user);
}
private User createUser() {
User user = new User();
user.setFirstName("Shreya");
user.setLastName("Mahajan");
user.setEmail("shreya.mahajan@nitorinfotech.com");
user.setRole("admin");
user.setPassword("shreya123");
return user;
}
这是我实际的服务方式。在测试时它给了我 null 变量 existingUser 和 response
@Override
public ResponseVO createUser(User user) {
ResponseVO responseVO = new ResponseVO();
User existingUser = userRepository.findByEmail(user.getEmail());
if(user.getEmail() != null){
if(existingUser != null){
responseVO.setStatusCode("500");
responseVO.setMessage("user Already Exists");
}else{
User response = userRepository.save(user);
if(response == null){
responseVO.setStatusCode("400");
responseVO.setMessage("Failure");
}else{
responseVO.setStatusCode("200");
responseVO.setMessage("Success");
}
}
}
return responseVO;
}
我正在尝试编写一个测试用例和模拟方法 findByEmail() 和 save() 但是在模拟时我没有收到 thenreturn 中提到的 return 中的用户对象 return() 和做return().
谁能帮忙。
您可以尝试以下方法:
请删除 mockUserRepository = Mockito.mock(UserRepository.class);
,因为它是多余的。
而不是
Mockito.doReturn(user).when(mockUserRepository).findByEmail(user.getEmail());
这样做
Mockito.doReturn(user).when(mockUserRepository).findByEmail(Mockito.any());
@InjectMocks
private UserServiceImpl userService;
@Mock
private UserRepository mockUserRepository;
//private UserServiceImpl userServiceImpl;
@Before
public void initMocks() throws Exception {
MockitoAnnotations.initMocks(this);
mockUserRepository = Mockito.mock(UserRepository.class);
}
@Test
public void testCreateUser() {
User user = createUser();
Mockito.doReturn(user).when(mockUserRepository).findByEmail(user.getEmail());
Mockito.when(mockUserRepository.save(user)).thenReturn(user);
userService.createUser(user);
}
private User createUser() {
User user = new User();
user.setFirstName("Shreya");
user.setLastName("Mahajan");
user.setEmail("shreya.mahajan@nitorinfotech.com");
user.setRole("admin");
user.setPassword("shreya123");
return user;
}
这是我实际的服务方式。在测试时它给了我 null 变量 existingUser 和 response
@Override
public ResponseVO createUser(User user) {
ResponseVO responseVO = new ResponseVO();
User existingUser = userRepository.findByEmail(user.getEmail());
if(user.getEmail() != null){
if(existingUser != null){
responseVO.setStatusCode("500");
responseVO.setMessage("user Already Exists");
}else{
User response = userRepository.save(user);
if(response == null){
responseVO.setStatusCode("400");
responseVO.setMessage("Failure");
}else{
responseVO.setStatusCode("200");
responseVO.setMessage("Success");
}
}
}
return responseVO;
}
我正在尝试编写一个测试用例和模拟方法 findByEmail() 和 save() 但是在模拟时我没有收到 thenreturn 中提到的 return 中的用户对象 return() 和做return().
谁能帮忙。
您可以尝试以下方法:
请删除 mockUserRepository = Mockito.mock(UserRepository.class);
,因为它是多余的。
而不是
Mockito.doReturn(user).when(mockUserRepository).findByEmail(user.getEmail());
这样做
Mockito.doReturn(user).when(mockUserRepository).findByEmail(Mockito.any());