我已經為服務層中的更新方法撰寫了測驗,它總是拋出例外“找不到具有此 id 的用戶”并且沒有作業。我試圖添加可選的,但它也沒有作業。你能給我一點建議嗎?我應該在測驗中修復什么? 我的測驗方法如下:
@Override
public UserDTO updateUser(String id, UserDTO updatedUser) {
Optional<UserEntity> databaseUser = userRepository.findById(Integer.valueOf(updatedUser.getUserName()));
if (databaseUser.isEmpty()) {
throw new UserNotFoundException("User with the this id is not found");
}
UserEntity entity = mapToUserEntity(updatedUser);
return map(userRepository.save(entity));
}
我的測驗看起來像:
@Test
void updateUserTest(){
final int id = 1;
final long roleId = 2L;
UserDTO userDto = new UserDTO();
userDto.setUserName(String.valueOf(12));
userDto.setId(String.valueOf(id));
userDto.setName(new UserDTO.Name("surname", "firstname", "patronymic"));
userDto.setActive(true);
userDto.setEmails(List.of(new UserDTO.Email("email", "external")));
userDto.setRoles(List.of("2"));
userDto.setLastAccessDate(LocalDateTime.of(2022, 10, 25, 4, 20));
userDto.setUnit(null);
when(roleRepository.findById(any())).thenReturn(Optional.of(new UserDTO().setId(roleId)));
UserEntity userEntity = userService.mapToUserEntity(userDto);
when(userRepository.save(any())).thenReturn(userEntity.setId(id));
userService.updateUser(String.valueOf(id), userDto);
var actualUser = userService.updateUser(String.valueOf(id), userDto);
userDto.setUserName(String.valueOf(id));
assertEquals(actualUser, userDto);
}
uj5u.com熱心網友回復:
該updateUser方法呼叫userRepository.findById(Integer.valueOf(updatedUser.getUserName())).
測驗不會存根此方法,因此userRepository模擬物件將使用默認的答案行為來回傳一個值。示例代碼沒有顯示userRepository模擬是如何創建的,但是如果沒有自定義默認答案,它將默認使用RETURNS_DEFAULTS并回傳一個空Optional的方法回傳Optional。
為了讓它回傳userDto,你應該在呼叫userService.updateUser測驗之前存根方法:
when(userRepository.findById(12)).thenReturn(Optional.of(userEntity));
when(userRepository.save(any())).thenReturn(userEntity.setId(id));
userService.updateUser(String.valueOf(id), userDto);
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/524059.html
標籤:爪哇休息测试嘲弄
下一篇:如何設定linq進行單元測驗
