Testando validação de bean

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]