3
respostas

Classe ValidacaoTutorComAdocaoEmAndamento diferente no desafio

Olá, queria deixar mais um aviso para quem (assim como eu) tomou NullPointerException na classe ValidacaoTutorComAdocaoEmAndamento quando foi executar a solução apresentada. A classe ValidacaoTutorComAdocaoEmAndamento está diferente na versão apresentada na solução e NÃO vai funcionar.

Classe ValidacaoTutorComAdocaoEmAndamento no projeto inicial extraído do próprio curso

@Component
public class ValidacaoTutorComAdocaoEmAndamento implements ValidacaoSolicitacaoAdocao {

    @Autowired
    private AdocaoRepository adocaoRepository;

    @Autowired
    private TutorRepository tutorRepository;

    public void validar(SolicitacaoAdocaoDto dto) {
        List<Adocao> adocoes = adocaoRepository.findAll();
        Tutor tutor = tutorRepository.getReferenceById(dto.idTutor());
        for (Adocao a : adocoes) {
            if (a.getTutor() == tutor && a.getStatus() == StatusAdocao.AGUARDANDO_AVALIACAO) {
                throw new ValidacaoException("Tutor já possui outra adoção aguardando avaliação!");
            }
        }
    }

}

Classe ValidacaoTutorComAdocaoEmAndamento no projeto final extraído do próprio curso

@Component
public class ValidacaoTutorComAdocaoEmAndamento implements ValidacaoSolicitacaoAdocao {

    @Autowired
    private AdocaoRepository adocaoRepository;

    public void validar(SolicitacaoAdocaoDto dto) {
        boolean tutorTemAdocaoEmAndamento = adocaoRepository.existsByTutorIdAndStatus(dto.idTutor(), StatusAdocao.AGUARDANDO_AVALIACAO);

        if (tutorTemAdocaoEmAndamento) {
            throw new ValidacaoException("Tutor já possui outra adoção aguardando avaliação!");
        }
    }

}

Caso queiram que o teste funcione tem duas soluções:

  1. Implementar a classe ValidacaoTutorComAdocaoEmAndamento de acordo com o projeto FINAL do curso; ou
  2. Criar os próprios testes com a versão inicial do projeto, lembrando que estes não terão a mesma solução que foi apresentada nesta aula
3 respostas

Valeu demais por compartilhar, colega!

Olá,

Reparei neste tipo de questão quando fui programar os testes para as classes de validação. Os testes são completamente dependentes da implementação usada na classe principal, ou seja, caso esta implementação seja otimizada e passe a utilizar outras funcões de repository, por exemplo, mesmo que o novo código esteja absolutamente correto o teste vai falhar miseravelmente e terá que ser refeito.

Realmente tem sentido criar testes tão acoplados a forma como a classe principal foi implementada ?

Obrigada, Andréa

Muito Obrigado por compartilhar.