我有下面的方法,我需要使用mockito进行测试:
public User update(project.models.domain.User userObject) {
var user = validateIfUserExists(userObject);
var agroupmentFoundInDatabase = validateIfUserExistsInAgroupmentTable(userObject);
User result = userRepository.save(user);
if(!agroupmentFoundInDatabase.getProfileCode().equals(userObject.getProfile().getCode())) {
userUnionProfileRepository.delete(agroupmentFoundInDatabase);
userUnionProfileRepository
.save(UserUnionProfile.builder().userCode(userObject.getId())
.profileCode(userObject.getProfile().getCode()).build());
}
return result;
}
这是我的测试方法:
@Test
public void update() throws Exception {
br.com.rd.productmodels.product.domain.User userObject = mockUser();
User user = User.builder().code(135).description("test").build();
when(repository.findById(any())).thenReturn(Optional.of(user));
when(mapper.map(userObject, User.class)).thenReturn(user);
UserUnionProfile agroupmentObject = UserUnionProfile.builder().userCode(135).profileCode(12).build();
when(userUnionProfileRepository.findById(any())).thenReturn(Optional.of(agroupmentObject));
when(mapper.map(agroupmentObject,UserUnionProfile.class)).thenReturn(agroupmentObject);
when(repository.save(any())).thenReturn(user);
User entity = service.update(userObject);
verify(repository).save(any());
assertNotNull(entity);
}
但是当我运行我的测试时,它给出了以下消息:
PotentialStubbingProblem: Strict stubbing argument mismatch. Please check:
- this invocation of 'map' method:
mapper.map(Optional[UserUnionProfile(userCode=135, profileCode=12)],class project.domain.UserUnionProfile
);
我试过使用@MockitoSettings(strictness = Strictness.LENIENT)
。错误消失了,但是在执行mapper.map(Optional[UserUnionProfile(userCode=135, profileCode=12)],class project.domain.UserUnionProfile
行之后,我的结果是null。我该怎么办?
#更多关于我尝试测试的update方法的详细信息。下面是调用的其他方法:
private User validateIfUserExists(project.models.domain.User userObject) {
var user = userRepository.findById(userObject.getId());
if (user.isEmpty()) {
throw new UserNotFoundException(userObject.getId());
}
return mapper.map(userObject, User.class);
}
private UserUnionProfile validateIfUserExistsInAgroupmentTable(project.models.domain.User userObject) {
var agroupmentObject = userUnionProfileRepository.findById(userObject.getId());
if (agroupmentObject.isEmpty()) {
throw new AgroupmentNotFoundException(userObject.getId());
}
return mapper.map(agroupmentObject, UserUnionProfile.class);
}
发布于 2020-11-14 22:15:01
如果调用以下命令,测试应该会通过:
when(mapper.map(Optional.of(agroupmentObject), UserUnionProfile.class)).thenReturn(agroupmentObject);
而不是:
when(mapper.map(agroupmentObject, UserUnionProfile.class)).thenReturn(agroupmentObject);
因为在validateIfUserExistsInAgroupmentTable()
中映射的不是UserUnionProfile
,而是Optional<UserUnionProfile>
。
但是,我认为您真正想要的是更改方法的实现并映射Optional
的实际内容,而不是Optional
本身:
return mapper.map(agroupmentObject.get(), UserUnionProfile.class);
https://stackoverflow.com/questions/64825049
复制相似问题