.NET + Bogus: gerando sem complicações dados fake para testes
Seja em provas de conceito (POCs) ou em projetos que envolvam a automação de testes, a geração de dados fake em aplicações costuma ser conduzida com um viés “artesanal”. Desenvolvedores criam muitas vezes conjuntos de dados sem maiores cuidados com nomenclaturas ou um mínimo de padronização, podendo até mesmo gerar constrangimentos durante apresentações em virtude do uso de termos inadequados.
Vale destacar que este tipo de necessidade e seus eventuais problemas não estão restritos a uma linguagem de programação específica, ocorrendo no desenvolvimento de aplicações nas mais variadas stacks. Em um artigo anterior neste blog demonstrei inclusive como o Postman pode ser empregado na geração de dados fake (com seu suporte a automação com Collections + JavaScript):
Postman: gerando sem complicações dados fake para o teste de APIs REST
E quanto à plataforma .NET?
O projeto Bogus é uma excelente alternativa para a geração de dados fake em .NET, tomando como inspiração o Faker.js de JavaScript e implementações baseadas em interfaces fluentes como o FluentValidation. Além de possibilitar a geração diferentes tipos de dados divididos em agrupamentos como Company, Person, Internet, Commerce, Address e Vehicle, o Bogus também oferece suporte a diferentes idiomas/culturas por meio da utilização de Locales.
Já abordei inclusive do uso do Bogus em uma live recente no Canal .NET, com tal conteúdo estando disponível para ser assistida gratuitamente no YouTube:
Neste evento demonstrei uma implementação com a geração de dados de contatos corporativos. No construtor da classe ContatosRepository (configurada como um Singleton em Program.cs) podemos observar:
- Uma instância do tipo genérico Faker (linha 17) e que referencia a classe Contato está sendo criada, recebendo como parâmetro o Locale para padrões do Brasil (pt_BR);
- As chamadas ao método RuleFor permitem definir como propriedades de Contato serão preenchidas. Há até mesmo a alternativa de gerarmos valores de CPFs e CNPJs via RuleFor;
- O uso do método StrictMode com o parâmetro true indica que todos as propriedades de Contato deverão estar preenchidas, pois do contrário uma exceção será gerada;
- Por fim, o método Generate receberá como parâmetro o número de instâncias de Contato a serem produzidas.
Na próxima listagem temos a implementação do tipo Contato:
Ao executar esta aplicação teremos um resultado similar ao da imagem a seguir:
Esse repositório está disponível no GitHub:
https://github.com/renatogroffe/ASPNETCore6-REST_API-Bogus_SimulacaoContatos
Caso ache útil esta solução, peço por favor um ⭐️ no repositório apoiando. Fica também o convite para que vocês me sigam lá no GitHub!
Na listagem seguinte temos um segundo exemplo de uso do Bogus, desta vez simulando um cadastro de veículos com a classe VeiculosRepository:
Trata-se novamente de uma API REST, com um possível retorno produzido pela mesma indicado na próxima imagem:
Esta aplicação também foi disponibilizada no GitHub:
https://github.com/renatogroffe/ASPNETCore6-MinimalAPIs-OpenApi-Bogus_SimulacaoVeiculos
Caso ache útil esta segunda solução, peço também por favor um ⭐️ no repositório apoiando. Fica também o convite para que vocês me sigam lá no GitHub!