25%Off

Compre com desconto

Começou!

Começou!

00

DIAS

00

HORAS

00

MIN

00

SEG

Criando cenários de teste com Fixture Factory

Criando cenários de teste com Fixture Factory
maniche
maniche

Compartilhe

Cenários de teste com Fixture Factory

Escrever testes automatizados é com certeza um desafio, ainda mais para quem está começando. Mas, independente de conhecimento, montar cenários de teste é sempre uma tarefa que requer um certo esforço.

Essa é geralmente a parte mais chata de se escrever um teste. O programador precisa instanciar entidades (às vezes várias delas, pois uma pode ser composta por outro), passar valores específicos para elas, e etc. Em linguagens menos enxutas, como Java, isso costuma gastar algumas linhas de código de teste.

Para facilitar a vida, é comum que programadores apelem para classes especializadas, que ajudam a criar cenários de teste. Existem até padrões de projeto, como é o caso do Test Data Builder, que é um Builder (à la GoF) de cenários.

Um framework brasileiro que resolve bem esse problema é o Fixture-Factory. A ideia dele é justamente facilitar a criação de cenários. Como? Você ensina ele a criar objetos e, depois disso, apenas pede instâncias de cenários pra ele.

Veja, por exemplo, o código abaixo. Nele definimos duas fixtures (que é o nome que damos para "exemplos de cenários") com o nome valido, e depois pedimos uma instância de Cliente:

 Fixture.of(Cliente.class).addTemplate("valido", new Rule(){{ add("id", random(Long.class, range(1L, 200L))); add("nome", random("Anderson Parra", "Arthur Hirata")); add("apelido", random("nerd", "geek")); add("email", "${apelido}@gmail.com"); add("aniversario", instant("18 years ago")); add("endereco", fixture(Endereco.class, "valido")); }});

Fixture.of(Endereco.class).addTemplate("valido", new Rule(){{ add("id", random(Long.class, range(1L, 100L))); add("rua", random("Paulista Avenue", "Ibirapuera Avenue")); add("cidade", "São Paulo"); add("estado", "${cidade}"); add("pais", "Brasil"); add("cep", random("06608000", "17720000")); }});

Cliente cliente = Fixture.from(Cliente.class).gimme("valido"); 

Repare na quantidade de maneiras diferentes que você pode configurar sua fixture. O nome é randômico, o e-mail é baseado no outro atributo, o endereço vem de outra fixture, e etc. O framework é realmente bem completo, e é constantemente evoluído.

Há um tempo atrás, o Anderson Parra, um dos criadores do framework deu uma palestra aqui na Caelum sobre o assunto. Você pode vê-la aqui:

Se você deseja aprender mais sobre testes automatizados e TDD, pode consultar meu livro, ou os cursos online do Alura, além do nosso curso de práticas ágeis na Caelum.

Veja outros artigos sobre Programação