Olá!
Criei uma pequena classe utilitária com o objetivo de criar testes unitários envolvendo validação de bean. Acho que ficou legal, proporcionando um teste com código pequeno e fácil de ler.
Estou compartilhando porque talvez ajude alguém. Críticas e sugestões de melhoria são bem vindas.
Abraços,
Márcio
[code]public class UtilitarioDeValidacao {
Validator validador = Validation.buildDefaultValidatorFactory()
.getValidator();
public List<String> validar(BEAN bean) {
return capturarMensagens(validador.validate(bean));
}
@SuppressWarnings({ "rawtypes", "unchecked" })
private List<String> capturarMensagens(
Set<ConstraintViolation<BEAN>> violacoesDeRestricao) {
List<String> mensagensDeViolacao = new ArrayList<String>();
for (Iterator iterator = violacoesDeRestricao.iterator(); iterator
.hasNext();) {
ConstraintViolation<BEAN> violacaoDeRestricao = (ConstraintViolation<BEAN>) iterator
.next();
mensagensDeViolacao.add(violacaoDeRestricao.getMessage());
}
return mensagensDeViolacao;
}
}[/code]
Exemplo de uso:
[code]public class TesteDeAgencia {
private static UtilitarioDeValidacao<Agencia> utilitarioDeValidacao = new UtilitarioDeValidacao<Agencia>();
private static List<String> mensagensDeViolacao;
@Test
public void possoCriarUmaAgencia() {
Agencia agencia = new Agencia("0001", "Centro Niterói");
assertTrue(agencia.getCodigo().equals("0001"));
assertTrue(agencia.getNome().equalsIgnoreCase("CENTRO NITERÓI"));
}
@Test
public void naoPossoCriarUmaAgenciaComDadosNulos() {
Agencia agencia = new Agencia(null, null);
mensagensDeViolacao = utilitarioDeValidacao.validar(agencia);
assertTrue(mensagensDeViolacao.contains("Código não pode ser nulo"));
assertTrue(mensagensDeViolacao.contains("Nome não pode ser nulo"));
}
@Test
public void naoPossoCriarUmaAgenciaComDadosInvalidos() {
Agencia agencia = new Agencia("1", "A");
mensagensDeViolacao = utilitarioDeValidacao.validar(agencia);
assertTrue(mensagensDeViolacao.contains("Código deve ter 4 caracteres"));
assertTrue(mensagensDeViolacao
.contains("Nome deve ter entre 2 e 30 caracteres"));
}
}[/code]
O bean:
[code]@Entity
@NoArgsConstructor
@EqualsAndHashCode(of = “codigo”, callSuper = false)
public class Agencia extends ClasseBase {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Getter
protected Integer id;
@NotNull(message = "Código não pode ser nulo")
@Size(min = 4, max = 4, message = "Código deve ter 4 caracteres")
@Column(unique = true)
@Getter
protected String codigo;
@NotNull(message = "Nome não pode ser nulo")
@Size(min = 2, max = 30, message = "Nome deve ter entre 2 e 30 caracteres")
@Column(unique = true)
@Getter
protected String nome;
public Agencia(String codigo, String nome) {
this.codigo = codigo;
this.nome = nome;
}
}[/code]