我正在用mockito进行单元测试,在执行.保存()之后,我在存储库中得到了空值。
我的测试:
....
@BeforeEach
void setUp() {
// USUARIO
user = new User();
user.setUserName("Username A");
user.setPassword("Pass A");
user.setConfirmPassword("Pass A");
}
@MockitoSettings(strictness = Strictness.LENIENT)
@Test
void createUserNoExistValidConfirmation() throws Exception {
User userToPassParam = new User();
userToPassParam.setUserName("Username_Aa");
userToPassParam.setPassword("Pass A");
userToPassParam.setConfirmPassword("Pass A");
// checkUserNameAvailable
Mockito.when(userDaoRepository.findByUserName(userToPassParam.getUserName())).thenReturn(Optional.ofNullable(user));
// -- checkPasswordValid
Mockito.when(bCryptPasswordEncoder.encode(userToPassParam.getPassword())).thenReturn(user.getPassword());
// -- save
Mockito.when(userDaoRepository.save(userToPassParam)).thenReturn(user);
User userToCallServiceImpl = new User();
userToCallServiceImpl.setUserName("Username A");
userToCallServiceImpl.setPassword("Pass A");
userToCallServiceImpl.setConfirmPassword("Pass A");
User user = userServiceImpl.createUser(userToCallServiceImpl); // HERE GET NULLS
System.out.println("User: " + user);
System.out.println("this.user: " + this.user);
Assertions.assertEquals(user.getUserName(), this.user.getUserName());
}
.....
传递的userToPassParam参数的值:x1c 0d1x返回预期对象
我只对待对象的3个值,“userName,password,confirmPassword”,其他值对我无关紧要。
当我试图通过测试时:用户服务实现
@Override
public User createUser(User user) throws Exception {
if (checkUserNameAvailable(user) && checkPasswordValid(user)) {
// cogemos el estado de la DB para más adelante: user = save()
String encodePassword = bCryptPasswordEncoder.encode(user.getPassword());
user.setPassword(encodePassword);
user = userDaoRepository.save(user);
}
return user;
}
用户有一个“before保存”值。当它保存时,我得到一个null。
在repository.save(object)之后,由.保存“模拟对象”返回的对象为空。
我不太明白为什么.保存返回null,而在“when”中我指定了返回什么。这就好像mockito没有拦截.save()来返回对象一样。
注意:我使用的是Junit 5,Mockito 4.6.1
我希望.保存()返回“用户”,就像我在@BeforeEach void setUp()中指定userDaoRepository.save。也就是说,拦截.保存(),以便传回对象。
1条答案
按热度按时间n3schb8v1#
我已经用ArgumentMatchers修复了这个问题。由于某些未知的原因,Mockito需要它。
导入静态org.mockito.ArgumentMatchers.any;
如果userDaoRepository.save。
信息来源:Here