Neste artigo vou falar sobre o conceito de Dummies no contexto de testes unitários, e como você pode criar e customizar utilizando a biblioteca AutoFixture.
O que são Dummies
Dummies são dados fakes, geralmente criados para apenas serem passados em alguma chamada de método de interesse, que esteja sob teste.
Alguns exemplos são modelos de entrada e modelos de saída de chamadas de camada de aplicação, como serviços ou commands/queries. Um fator importante a ser comentado é que em alguns deles uma validação pode ser feita, então enquanto você possa utilizar dados “completamente” fakes, em outros cenários você precisará realizar algum tipo de customização ou até mesmo preferir utilizar uma abordagem “manual” para a geração dos dados.
O que é AutoFixture
AutoFixture é uma biblioteca que permite a criação de Dummies de maneira simples e rápida. Além disso, também permite a customização desse processo, possibilitando seu uso em uma quantidade ainda maior de cenários.
Irei mostrar neste artigo:
- Como gerar um Dummy;
- Como gerar uma lista de Dummies;
- Como customizar a geração de um Dummy.
Vamos lá?
AutoFixture na prática
Cenário:
- Projeto de biblioteca de classes criado, contendo uma classe de serviço de aplicação chamada CustomerService;
- Projeto de testes unitários com xUnit criado, com uma classe de teste chamada CustomerServiceTests.
Por razões didáticas, o foco único desse artigo é a geração de Dummies com AutoFixture. Não irei utilizar outras bibliotecas, como Moq, nem realizar verificações com o xUnit.
Logo abaixo você pode encontrar o código da classe CustomerService, que contém o método Add que estará sob teste.
O código da classe AddCustomerInputModel pode ser encontrado logo abaixo.
Com as duas classes que estarão envolvidas no teste. Podemos ir para nosso projeto do xUnit, mais especificamente para nossa classe de teste CustomerServiceTests.
Abaixo está mostrado como gerar um Dummy com o AutoFixture. Note que não estamos realizando quaisquer customizações nos valores gerados.
Primeiro, instanciamos um objeto de tipo Fixture. Em seguida, para a criação de um Dummy utilizamos o método Create (para um único) e CreateMany(para vários, podendo receber a quantidade via parâmetro).
Debugando o teste, note os valores gerados automaticamente:
Agora vem a pergunta: e se eu quiser customizar um pouco esses valores gerados, para pelo menos por exemplo, passar em uma validação do modelo de entrada?
O AutoFixture oferece essa possibilidade atráves do método Build e With, encadeados, como no código abaixo. O Build vai definir qual o tipo de objeto você quer customizar na geração de Dummy, e o With vai personalizar a nível de propriedade.
Note que preferi criar uma classe própria para instanciar o objeto de tipo IPostprocessComposer<AddCustomerInputModel>, que é retornado a partir da customização. Esse tipo tem em sua assinatura também os métodos Create e CreateMany.
Nesse caso, foi definido que o ano das datas a serem geradas vai estar entre 19 e 70 anos atrás, o mês entre 1 e 12, e o dia entre 1 e 29 (o Next não inclui o valor de limite superior). Já para o número de telefone, foi gerada uma lista de 3 elementos com cadeias de caracteres representando os telefones de tamanho 10.
Com essa abordagem, conseguimos ter liberdade para customizar como queremos que o AutoFixture gere os dados.
Quer alavancar sua carreira como Desenvolvedor(a) .NET?
Além de Desenvolvedor .NET Sênior, eu sou instrutor de mais de 700 alunos e também tenho dezenas de mentorados.
Conheça o Método .NET Direto ao Ponto, minha plataforma com mais de 800 videoaulas, com cursos cobrindo temas relacionados a linguagem C# e Programação Orientada a Objetos, APIs REST com ASP NET Core, Microsserviços com ASP NET Core, HTML, CSS e JavaScript, Desenvolvimento Front-end com Angular, JavaScript Intermediário, TypeScript, Formação Arquitetura de Software, Computação em Nuvem, Agile, SQL, e muito mais.
Inclui comunidade de centenas de alunos, suporte por ela, plataforma e e-mail, atualizações regulares e muito mais.
Clique aqui para ter mais informações e garantir sua vaga
Conclusão
Neste artigo foram apresentados conceitos sobre Dummies, AutoFixture e como personalizar e gerar Dummies com essa biblioteca.
O que achou? Compartilhe com sua equipe de desenvolvimento.