Этот модульный тест относительно RunTimeException не имеет для меня никакого смысла - PullRequest
0 голосов
/ 18 июня 2020

Я работаю над 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 не могу дальше без чьей-либо помощи.

...