Я работаю над Spring Boot CRUD RESTful API с сущностью User , которая состоит из параметров id
и name
.
Возможно, UserNotFound ошибка, т.е. RunTimeException на конечных точках, которые зависят от id
, которое будет найдено, например: Список пользователей , Удалить пользователя и Обновить пользователя .
Итак, в моих модульных тестах я также должен проверить, правильно ли генерируется RunTimeException , верно? Это то, что я пытаюсь сделать, и мои тесты прошли, но я не могу понять почему, мне это кажется неправильным.
My DeleteUserServiceTest :
@RunWith(MockitoJUnitRunner.class)
public class DeleteUserServiceTest {
@Mock
private UserRepository userRepository;
@InjectMocks
private DeleteUserService deleteUserService;
@Test
public void whenGivenId_shouldDeleteUser_ifFound(){
User user = new User();
user.setName("Test Name");
user.setId(1L);
when(userRepository.findById(user.getId())).thenReturn(java.util.Optional.of(user));
deleteUserService.deleteUser(user.getId());
verify(userRepository).deleteById(user.getId());
}
@Test(expected = RuntimeException.class)
public void should_throw_exception_when_user_doesnt_exist() {
User user = new User();
user.setId(89L);
user.setName("Test Name");
given(userRepository.findById(anyLong())).willReturn(Optional.ofNullable(null));
deleteUserService.deleteUser(user.getId());
}
}
Это моя служба, которая тестируется:
@Service
public class DeleteUserService {
@Autowired
UserRepository repository;
public void deleteUser(Long id) {
Optional<User> userOptional = repository.findById(id);
if (!userOptional.isPresent()) {
throw new UserNotFoundException(id);
} else {
repository.deleteById(id);
}
}
}
И лакомый кусочек кода UserNotFound:
@ControllerAdvice
public class UserNotFoundAdvice {
@ResponseBody
@ExceptionHandler(UserNotFoundException.class)
@ResponseStatus(HttpStatus.NOT_FOUND)
String userNotFoundHandler(UserNotFoundException ex) {
return ex.getMessage();
}
}
public class UserNotFoundException extends RuntimeException {
public UserNotFoundException(Long id) {
super("Could not find user with id " + id + ".");
}
}
Был бы признателен, если бы кто-нибудь нашел время, чтобы объяснить что я делаю правильно и что я делаю здесь неправильно. Кажется, я ударился об стену и go не могу дальше без чьей-либо помощи.