C# - Gerando Dados Fake com Bogus


 Hoje veremos como usar a biblioteca Bogus para gerar dados Fake para testes em seu projeto.

Gerar dados para testes, dados simulados ou fake, dependendo do cenário pode ser um desafio.

Ainda bem que existem pacotes de terceiros que foram criados para realizar essa tarefa maçante mas necessária.

O Bogus é uma biblioteca criada por Brian Chavez que se propõe a gerar dados fake para realização de testes e você pode consultar o seu repositório aqui.

Para usar a distribuição Nuget basta instalar o pacote no seu projeto :  install-package Bogus -Version 29.0.2

Vejamos a seguir um exemplo prático de como usar este pacote criando um projeto do tipo Console (.NET Core).

Instale o pacote no seu projeto : install-package Bogus -Version 29.0.2

Agora vamos criar uma classe Cliente para simular o nosso domínio e que iremos usar para gerar os dados fake.

    public class Cliente
    {
        public int Id { get; set; }
        public string Nome { get; set; }
        public string Email { get; set; }
        public string Telefone { get; set; }
        public string Endereco { get; set; }
        public DateTime Nascimento { get; set; }
        public string Sexo { get; set; }
        public bool Ativo { get; set; }
        public decimal Renda { get; set; }
    }

Assim nosso objetivo é gerar dados fake para esta classe e em português usando o Bogus.

Para isso vamos criar uma classe FakeDataClientes com um método estático ListaClientesFake():

using Bogus;
using System.Collections.Generic;
namespace CShp_FakeData1
{
    public static class FakeDataClientes
    {
        public static List<Cliente> ListaClientesFake()
        {
            var clienteFaker = new Faker<Cliente>("pt_BR")
                .RuleFor(c => c.Id, f => f.IndexFaker)
                .RuleFor(c => c.Nome, f => f.Name.FullName(Bogus.DataSets.Name.Gender.Female))
                .RuleFor(c => c.Email, f => f.Internet.Email(f.Person.FirstName).ToLower())
                .RuleFor(c => c.Telefone, f => f.Person.Phone)
                .RuleFor(c => c.Endereco, f => f.Address.StreetAddress())
                .RuleFor(c => c.Nascimento, f => f.Date.Recent(100))
                .RuleFor(c => c.Sexo, f => f.PickRandom(new string[] { "masculino", "feminino" }))
                .RuleFor(c => c.Ativo, f => f.PickRandomParam(new bool[] { true, true, false }))
                .RuleFor(o => o.Renda, f => f.Random.Decimal(500, 2000));
            var clientes = clienteFaker.Generate(10);
            return clientes;
        }
    }
}

Aqui estamos aplicando as regras definidas pela biblioteca Bogus usando a linguagem fluente para configurar nosso objeto Cliente; o “RuleFor” é responsável por gerar os dados, onde no primeiro parâmetro temos as propriedades que desejamos alimentar e no segundo usamos os fakes do Bogus para popular a propriedade.

Vejamos alguns detalhes do código:

- Faker<Cliente>("pt_BR")  cria um objeto do tipo Cliente genérico onde estamos localizando os dados que serão gerados para o português do Brasil

- f.IndexFaker - Gera dados incrementais com base no tipo definido (Id)

.RuleFor(c => c.Nome, f => f.Name.FullName(Bogus.DataSets.Name.Gender.Female)) - Aqui estou gerando apenas  nomes do sexo feminino (Female);

- clienteFaker.Generate(10) - O método Generate gera os dados fake e o valor indica a quantidade que desejamos gerar.

As demais regras estão detalhadas na documentação do Bogus.

Vamos agora definir o código no método Main() para obter e exibir os dados gerados

class Program
    {
        static void Main(string[] args)
        {
            var clientes = FakeDataClientes.ListaClientesFake();

            foreach(var cli in clientes)
            {
                Console.WriteLine(cli.Id);
                Console.WriteLine(cli.Nome);
                Console.WriteLine(cli.Email);
                Console.WriteLine(cli.Telefone);
                Console.WriteLine(cli.Endereco);
                Console.WriteLine(cli.Nascimento);
                Console.WriteLine(cli.Sexo);
                Console.WriteLine(cli.Ativo);
                Console.WriteLine(cli.Renda);
            }
            Console.ReadLine();
        }
    }

O resultado obtido é visto abaixo:

Assim o Bogus é uma ferramenta simples mas bastante útil para gerar dados fake

Pegue o projeto aqui : CShp_FakeData1.zip

"Porque a lei foi dada por Moisés; a graça e a verdade vieram por Jesus Cristo."
João 1:17

Referências:


José Carlos Macoratti