Testando validação de bean

0 respostas
marcio28

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
public class UtilitarioDeValidacao<BEAN> {

	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;
	}

}
Exemplo de uso:
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"));
	}

}
O bean:
@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;
	}

}
Criado 26 de fevereiro de 2012
Respostas 0
Participantes 1