Em muitos cenários de desenvolvimento, seja para testes, prototipagem ou simulação, a geração de dados falsos (fake data) é essencial para garantir que o sistema funcione corretamente em condições controladas. No C#, uma das bibliotecas mais populares para gerar esses dados é o Bogus. Este artigo vai abordar como utilizar o Bogus para gerar dados falsos em suas aplicações de forma simples e eficaz.

O que é o Bogus?

O Bogus é uma biblioteca de geração de dados falsos para C# que facilita a criação de dados realistas para testes, prototipagem e preenchimento de bases de dados. Ela permite gerar uma ampla gama de informações, como nomes, endereços, e-mails, números de telefone e muito mais, de maneira flexível e altamente configurável.

Vantagens

Ao contrário de outras abordagens, como escrever manualmente os dados de teste ou usar dados genéricos, o Bogus permite criar dados mais realistas e que atendem às necessidades específicas do seu projeto. Isso é especialmente útil quando se precisa simular cenários complexos em sistemas de testes ou protótipos.

Fácil de usar: a API é simples e intuitiva.

Configuração flexível: permite gerar dados customizados conforme as necessidades.

Desempenho: geração eficiente de grandes volumes de dados.

Suporte a múltiplos tipos de dados: nomes, endereços, e-mails, datas, números e até mesmo dados customizados com regras.

Instalação no projeto

A instalação do Bogus é simples e pode ser feita via console NuGet ou pelo .NET CLI:

				
					Via Console do NuGet
Install-Package Bogus

Via .NET CLI:
dotnet add package Bogus

				
			

Com o pacote instalado, você pode começar a gerar dados falsos imediatamente!

Gerando dados básicos

O Bogus fornece uma maneira fácil de gerar dados simples. A seguir, veremos como criar uma instância do “Faker<T>” para gerar dados como nomes, e-mails e endereços.

				
					using Bogus;

public class Program
{
    public static void Main()
    {
        var faker = new Faker();

        string nome = faker.Name.FullName();
        string email = faker.Internet.Email();
        string endereco = faker.Address.FullAddress();

        Console.WriteLine($"Nome: {nome}");
        Console.WriteLine($"E-mail: {email}");
        Console.WriteLine($"Endereço: {endereco}");
    }
}

				
			

No código acima, nós criamos 3 tipos de dados fake:

O Faker.Name.FullName() que gera um nome completo (primeiro e último nome).

O Faker.Internet.Email() que gera um e-mail aleatório.

E o Faker.Address.FullAddress() que gera um endereço completo com rua, cidade e CEP.

Esses métodos são apenas exemplos simples, mas o Bogus oferece uma variedade de opções para gerar diferentes tipos de dados, como números de cartão de crédito, CNPJs, documentos, e até mesmo informações financeiras, como valores de compras e transações.

Gerando dados com uma cultura específica

Caso você deseje gerar dados em um idioma diferente, é possível especificar o idioma durante a criação do objeto “Faker” utilizando o parâmetro de cultura. Por exemplo, para gerar dados em português do Brasil, basta usar “new Faker(“pt_BR“)”. Assim, os dados serão gerados conforme as convenções culturais e linguísticas do idioma especificado.

Gerando múltiplos dados

O Bogus também oferece uma maneira mais compacta e eficiente de gerar múltiplos dados de uma vez utilizando o método “Generate(int quantidade)”. Esse método permite gerar uma lista de objetos em uma única linha de código, sem a necessidade de um loop manual.

				
					 var faker = new Faker<Produto>()
        .RuleFor(p => p.Nome, f => f.Commerce.ProductName())
        .RuleFor(p => p.Preco, f => f.Commerce.Price(10, 100));

var produtos = faker.Generate(10);
				
			

O código utiliza o método “Generate(10)” do Bogus para gerar 10 objetos ”Produto”. Ele define regras para as propriedades “Nome” e “Preco” com “RuleFor()”, gerando um nome de produto e preço aleatórios. O método Generate(10) cria e armazena esses 10 objetos em uma lista.

Criando dados complexos com classes customizadas

Uma das grandes vantagens do Bogus é a capacidade de gerar dados para classes personalizadas, com várias propriedades. Isso é especialmente útil quando se trabalha com entidades mais complexas, como clientes, pedidos, produtos, etc.

Vamos ilustrar isso criando um objeto “Cliente”, que possui várias propriedades e um “Endereco” como uma propriedade aninhada:

				
					public class Cliente
 {
     public string Nome { get; set; }
     public string Email { get; set; }
     public Endereco Endereco { get; set; }
     public DateTime DataNascimento { get; set; }
     public string Telefone { get; set; }
 }

 public class Endereco
 {
     public string Rua { get; set; }
     public string Cidade { get; set; }
     public string Estado { get; set; }
 }

				
			

Agora, vamos usar o Bogus para gerar instâncias dessas classes de forma automática e realista.

				
					var faker = new Faker<Cliente>()
            .RuleFor(c => c.Nome, f => f.Name.FullName())
            .RuleFor(c => c.Email, f => f.Internet.Email())
            .RuleFor(c => c.Endereco, f => new Endereco
            {
                Rua = f.Address.StreetAddress(),
                Cidade = f.Address.City(),
                Estado = f.Address.State()
            });

Cliente cliente = faker.Generate();
        
Console.WriteLine($"Nome: {cliente.Nome}");
Console.WriteLine($"E-mail: {cliente.Email}");
Console.WriteLine($"Endereço: {cliente.Endereco.Rua}, {cliente.Endereco.Cidade}, {cliente.Endereco.Estado}");

				
			

No código acima, estamos criando uma instância de “Faker<Cliente>”, o que indica que queremos gerar um objeto do tipo “Cliente”. O Bogus irá gerar dados para essa classe com base nas regras que definimos a seguir.

A função “RuleFor” é utilizada para definir regras de geração de dados para cada propriedade do objeto “Cliente”. O primeiro parâmetro é a propriedade do objeto e o segundo é uma função que descreve como gerar os dados dessa propriedade.

Por fim, o método “Generate()” cria uma instância do objeto “Cliente” com os dados gerados aleatoriamente conforme as regras que definimos e apresentamos essas informações na tela.

Usando regras específicas

Além de gerar dados simples e complexos, o Bogus permite a configuração de regras específicas para criar dados mais realistas. Você pode, por exemplo, gerar números dentro de um intervalo ou criar dados baseados em enumerações personalizadas.

				
					var faker = new Faker<Cliente>()
 .RuleFor(x => x.DataNascimento, f => f.Date.Past(30, DateTime.Now.AddYears(-18)))
 .RuleFor(x => x.Telefone, f => f.Phone.PhoneNumber("(0##) 9####-####"));

var cliente = faker.Generate();

Console.WriteLine($"Data de Nascimento: {cliente.DataNascimento}");
Console.WriteLine($"Número de Telefone: {cliente.Telefone}");

				
			

No código acima nós criamos duas regras específicas. A primeira gera uma data de nascimento aleatória com até 30 anos de idade e garante que o cliente tenha mais de 18 anos. Já a segunda, gera um número de telefone no formato especificado.

Gerando CPF e CNPJ

O Bogus oferece suporte para gerar CPF e CNPJ válidos de maneira simples, através de uma extensão chamada “Bogus.Extensions.Brazil”. Essa extensão adiciona métodos específicos para gerar documentos brasileiros de forma realista e válida, como o CPF e o CNPJ. Essa extensão já vem dentro do pacote que instalamos no início.

				
					var faker = new Faker("pt_BR");

string cpf = faker.Person.Cpf();
string cnpj = faker.Company.Cnpj();

Console.WriteLine($"CPF Gerado: {cpf}");
Console.WriteLine($"CNPJ Gerado: {cnpj}");

				
			

Acelere a sua carreira conosco!

Se você é Desenvolvedor .NET Júnior e quer acelerar sua carreira até nível Pleno com salário de R$7k+, ou mesmo busca a primeira vaga, conheça a Mentoria .NET StartClique aqui

Se é Desenvolvedor .NET Pleno ou Sênior e quer virar referência técnica em sua equipe e mercado, com salário de R$10k+, conheça a Mentoria .NET ExpertClique aqui

Conclusão

Ao incorporar o Bogus em seu fluxo de desenvolvimento, você não apenas otimiza o processo de criação de dados de teste, mas também aprimora a qualidade geral de suas aplicações. A capacidade de gerar dados realistas, como nomes, endereços e números de documentos, permite que você simule uma ampla gama de cenários e garanta que seu código funcione adequadamente em situações reais. O Bogus se adapta bem a diferentes necessidades, desde pequenos testes unitários até grandes volumes de dados para protótipos e bancos de dados de desenvolvimento.