Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

É necessário testar mappers?

Boa noite, pessoal!

Se eu tenho uma classe que faz somente a conversão de um objeto para outro, tipo um mapper, e não há nenhuma regra de negócio nesse mapper, eu não deveria testar, certo? Eu sei que no curso o professor instruiu para não testar dto's, por exemplo, no projeto existem alguns construtores que fazem meio que um papel de mapper, exemplo:

public record AbrigoDto(Long id, String nome) {

    public AbrigoDto(Abrigo abrigo) {
        this(abrigo.getId(), abrigo.getNome());
    }

}

Aqui a pessoa passa um Abrigo e recebe um AbrigoDto.

Mas se tivésssemos um mapper com set(), do tipo:

public class UserMapper {
public UserDTO toDTO(User user) {
if (user == null) {
return null;
}
UserDTO dto = new UserDTO();
dto.setId(user.getId());
dto.setName(user.getName());
dto.setEmail(user.getEmail());
return dto;
}
}

Também não faz sentido testar, certo?

Mas e se dentro desses sets() tivessem alguma regra de negócio do tipo:

public class UserDTO {

private String id;
private String nome;
.
.
.


public void setNome(String nome) {
if (nome == null || nome.trim().isEmpty()) {
throw new IllegalArgumentException("O nome não pode ser nulo ou em branco");
}
if (nome.length() < 2) {
throw new IllegalArgumentException("O nome deve ter pelo menos 2 caracteres");
}
if (!nome.matches("[a-zA-Z\\s]+")) {
throw new IllegalArgumentException("O nome não pode conter números ou caracteres especiais");
}
this.nome = nome;
}

}

Eu deveria testar, certo?

1 resposta
solução!

Olá!

Essa é uma ótima pergunta e um ponto importante quando pensamos em boas práticas de testes. Vamos lá!

Quando falamos sobre mappers que simplesmente convertem dados de um objeto para outro sem qualquer lógica adicional, como no seu exemplo inicial, geralmente não é necessário escrever testes unitários para eles. Isso porque eles são considerados operações triviais e o esforço de manutenção dos testes pode não justificar o benefício.

No entanto, quando um mapper ou qualquer método começa a incluir lógica, mesmo que mínima, como validações ou transformações de dados, é uma boa prática incluir testes para garantir que essa lógica funcione conforme esperado. No seu exemplo, a classe UserDTO tem validações no método setNome(), o que pode impactar o comportamento do sistema se não for tratado corretamente. Portanto, faz sentido escrever testes para cobrir esses cenários de validação.

Por exemplo, você pode criar testes para verificar se uma IllegalArgumentException é lançada quando o nome é nulo, em branco, muito curto ou contém caracteres inválidos. Isso ajuda a garantir que a lógica de validação funcione corretamente e evita que bugs passem despercebidos.

Espero ter ajudado e bons estudos!