我正在使用mockito进行单元测试,在执行. save()之后,我在存储库中得到了null。
我的测试:
....
@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());
}
.....
我只处理对象的3个值,“userName、passd-Password”其他值对我来说无关紧要。
当我尝试通过测试时:userServiceImpl
@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;
}
repository.save(object)后,. save-mock object返回的对象为null。
我不太明白为什么. save返回null,而在“当”中我指定要返回什么。就好像mockito没有拦截.save()来返回对象。
注意:我使用JUnit 5,Mockito 4.6.1
我期望. save()返回我在my@Before每一个void setUp(){…}中指定的用户。Mockito.time(userDaoRepository.save(userToPassParam)).thenBack(user);也就是说,.save()的截取,以便它返回对象。
我已经用一个参数匹配器修复了这个问题。出于某种未知的原因,Mockito需要它。
导入静态org. mockita.ArgumentMatcher.any;
模拟i到。当(userDaoRepository.save(任何(用户。类)))。然后返回(用户);
信息来源:这里
注意:我还实现了equals和hashCode覆盖,但它不会检测到它们。