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 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.
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.
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!
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.
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.
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()
.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.
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()
.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.
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()
.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.
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}");
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 Start: Clique 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 Expert: Clique aqui
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.