Bogus:强大的 C假数据生成器

360影视 动漫周边 2025-09-18 14:00 1

摘要:Bogus 是一个简单yet功能强大的 C# 库,用于生成逼真的假数据。无论是在测试、原型设计还是演示中,Bogus 都能帮助你快速生成所需的模拟数据。本文将详细介绍 Bogus 的使用方法,并提供多个实用的例子。

Bogus 是一个简单yet功能强大的 C# 库,用于生成逼真的假数据。无论是在测试、原型设计还是演示中,Bogus 都能帮助你快速生成所需的模拟数据。本文将详细介绍 Bogus 的使用方法,并提供多个实用的例子。

首先,通过 NuGet 包管理器安装 Bogus:

Install-Package Bogus

让我们从一个简单的例子开始,生成一个假人的信息:

using Bogus;class Program{static void Main(string args){var faker = new Faker;Console.WriteLine($"Name: {faker.Name.FullName}");Console.WriteLine($"Email: {faker.Internet.Email}");Console.WriteLine($"Phone: {faker.Phone.PhoneNumber}");Console.WriteLine($"Address: {faker.Address.FullAddress}");}}var faker = new Faker("zh_CN");

Bogus 提供了多种类型的假数据生成器:

var faker = new Faker;Console.WriteLine($"Company: {faker.Company.CompanyName}");Console.WriteLine($"Catch Phrase: {faker.Company.CatchPhrase}");Console.WriteLine($"BS: {faker.Company.Bs}");Console.WriteLine($"Product: {faker.Commerce.Product}");Console.WriteLine($"Price: {faker.Commerce.Price}");Console.WriteLine($"Credit Card: {faker.Finance.CreditCardNumber}");Console.WriteLine($"Bitcoin Address: {faker.Finance.BitcoinAddress}");Console.WriteLine($"User Agent: {faker.Internet.UserAgent}");Console.WriteLine($"Color: {faker.Commerce.Color}");Console.WriteLine($"Time Zone: {faker.Date.TimeZoneString}");public class User{public int Id { get; set; }public string FirstName { get; set; }public string LastName { get; set; }public string Email { get; set; }public DateTime DateOfBirth { get; set; }}

我们可以这样生成假用户数据:

var faker = new Faker.RuleFor(u => u.Id, f => f.Random.Int(1, 100)) .RuleFor(u => u.FirstName, f => f.Name.FirstName) .RuleFor(u => u.LastName, f => f.Name.LastName) .RuleFor(u => u.Email, (f, u) => f.Internet.Email(u.FirstName, u.LastName)) .RuleFor(u => u.DateOfBirth, f => f.Date.Past(50)); User user = faker.Generate; Console.WriteLine($"Id: {user.Id}"); Console.WriteLine($"Name: {user.FirstName} {user.LastName}"); Console.WriteLine($"Email: {user.Email}"); Console.WriteLine($"Date of Birth: {user.DateOfBirth:d}"); .RuleFor(u => u.Id, f => f.Random.Int(1, 100)) .RuleFor(u => u.FirstName, f => f.Name.FirstName) .RuleFor(u => u.LastName, f => f.Name.LastName) .RuleFor(u => u.Email, (f, u) => f.Internet.Email(u.FirstName, u.LastName)) .RuleFor(u => u.DateOfBirth, f => f.Date.Past(50)); Listusers = faker.Generate(10); foreach (var user in users) { Console.WriteLine($"{user.FirstName} {user.LastName} ({user.Email})"); } public class OrderItem{public string ProductName { get; set; }public int Quantity { get; set; }public decimal Price { get; set; }}public class Order{public int Id { get; set; }public User Customer { get; set; }public DateTime OrderDate { get; set; }public ListItems { get; set; } public decimal TotalAmount { get; set; } }

我们可以这样生成假订单数据:

var userFaker = new Faker .RuleFor(u => u.Id, f => f.Random.Int(1, 100)) .RuleFor(u => u.FirstName, f => f.Name.FirstName) .RuleFor(u => u.LastName, f => f.Name.LastName) .RuleFor(u => u.Email, (f, u) => f.Internet.Email(u.FirstName, u.LastName)); var orderItemFaker = new Faker .RuleFor(oi => oi.ProductName, f => f.Commerce.ProductName) .RuleFor(oi => oi.Quantity, f => f.Random.Int(1, 10)) .RuleFor(oi => oi.Price, f => decimal.Parse(f.Commerce.Price)); var orderFaker = new Faker.RuleFor(o => o.Id, f => f.Random.Int(1000, 9999)) .RuleFor(o => o.Customer, f => userFaker.Generate) .RuleFor(o => o.OrderDate, f => f.Date.Recent(30)) .RuleFor(o => o.Items, f => orderItemFaker.Generate(f.Random.Int(1, 5))) .RuleFor(o => o.TotalAmount, (f, o) => o.Items.Sum(i => i.Price * i.Quantity)); Order order = orderFaker.Generate; Console.WriteLine($"Order ID: {order.Id}"); Console.WriteLine($"Customer: {order.Customer.FirstName} {order.Customer.LastName}"); Console.WriteLine($"Order Date: {order.OrderDate:d}"); Console.WriteLine("Items:"); foreach (var item in order.Items) { Console.WriteLine($" {item.ProductName} - Quantity: {item.Quantity}, Price: {item.Price:C}"); } Console.WriteLine($"Total Amount: {order.TotalAmount:C}");

使用 Seed 值可以确保每次生成相同的假数据:

var faker = new Faker("zh_CN");faker.Random = new Randomizer(12345);Console.WriteLine(faker.Name.FullName); // 每次运行都会生成相同的名字

Bogus 支持多种语言的本地化:

var fakerEs = new Faker("es");Console.WriteLine($"Spanish name: {fakerEs.Name.FullName}");var fakerDe = new Faker("de");Console.WriteLine($"German address: {fakerDe.Address.FullAddress}");var fakerFr = new Faker("fr");Console.WriteLine($"French phone number: {fakerFr.Phone.PhoneNumber}");public class CustomDataSource : DataSet{public CustomDataSource{FrUIts = new { "Apple", "Banana", "Cherry", "Date", "Elderberry" };Random = new Random;}public string Fruits { get; set; }public Random Random { get; set; }public string GetRandomFruit{return Fruits[Random.Next(0, Fruits.Length)];}}; faker.CustomInstantiator(f => new CustomDataSource); var customData = faker.Generate; Console.WriteLine($"Random fruit: {customData.GetRandomFruit}"); .RuleFor(u => u.Id, f => f.Random.Int(1, 100)) .RuleFor(u => u.FirstName, f => f.Name.FirstName) .RuleFor(u => u.LastName, f => f.Name.LastName) .RuleFor(u => u.Email, (f, u) => f.Internet.Email(u.FirstName, u.LastName)) .RuleFor(u => u.DateOfBirth, f => f.Date.Past(50)) .RuleSet("adult", set => { set.RuleFor(u => u.DateOfBirth, f => f.Date.Past(50, DateTime.Now.AddYears(-18))); }); var adultUser = userFaker.Generate(1, "adult").First; Console.WriteLine($"Adult user: {adultUser.FirstName} {adultUser.LastName}, Born: {adultUser.DateOfBirth:d}");

Bogus 是一个非常强大和灵活的假数据生成库。它不仅可以生成各种类型的基本数据,还可以创建复杂的对象结构。无论是在单元测试、UI 原型设计还是演示数据准备中,Bogus 都能大大提高你的工作效率。

通过本文提供的示例,你应该能够处理大多数需要生成假数据的场景。从简单的字符串和数字到复杂的对象图,Bogus 都能轻松应对。它的本地化支持和可扩展性使其成为 .NET 开发者工具箱中不可或缺的工具。

来源:小贺科技讲堂

相关推荐