一款开源、强大、简单易用的 .NET 假数据生成利器
前言
在日常的 .NET 项目开发中,我们经常需要大量的测试数据来验证业务逻辑、填充数据库、进行性能测试或者做产品演示。手动编写这些测试数据不仅枯燥乏味、浪费时间,而且难以覆盖各种边界场景。今天大姚给大家推荐一款开源、强大、简单易用的 .NET 假数据生成库:Bogus。
项目介绍
Bogus 是一个基于著名的 faker.js 移植而来的开源(MIT License) .NET 假数据生成库,它为 .NET 开发者提供了一套强大、简单易用的 API,可快速生成各种类型的模拟数据,支持 40+ 种语言区域本地化,广泛应用于单元测试、数据库填充、原型演示以及示例数据生成等场景。
支持语言
支持语言:C#、F#、VB.NET。
应用场景
- 单元测试 / 集成测试:快速生成符合业务模型的测试对象,替代手工 Mock 数据。
- 数据库填充(Seed):开发/测试环境数据库填充真实感十足的假数据。
- 性能与压力测试:批量生成大规模数据集来模拟真实负载。
- API 开发调试:快速构造 API 返回的模拟响应数据。
- 数据脱敏:替换生产数据中的敏感信息。
支持以下语言环境
Bogus 支持以下语言环境:

创建一个 .NET 控制台应用
接下来我们创建一个名为:BogusExercise .NET 9 控制台应用:


项目 NuGet 安装
在 NuGet 包管理器控制台中执行:
Install-Package Bogus
或者在 NuGet 包管理器中搜索安装:

Bogus 快速入门
生成 3 个随机订单的模拟用户信息
以下是 Bogus 仓库中提供的示例代码,使用 Bogus 生成了 3 个带随机订单的模拟用户。
public classProgram
{
static void Main(string[] args)
{
//生成 3 个随机订单的模拟用户信息
var users = GenerateSampleUsers(3);
}
///
/// 生成随机订单的模拟用户
///
///
///
public static List GenerateSampleUsers(int count = 3)
{
// 设置随机种子,生成可重复的数据集
Randomizer.Seed = new Random(3897234);
var fruit = new[] { "apple", "banana", "orange", "strawberry", "kiwi" };
var orderIds = 0;
var testOrders = new Faker()
// 开启严格模式:确保所有属性都有规则
.StrictMode(true)
// OrderId 自增
.RuleFor(o => o.OrderId, f => orderIds++)
// 从水果篮中随机挑选
.RuleFor(o => o.Item, f => f.PickRandom(fruit))
// 随机数量 1~10
.RuleFor(o => o.Quantity, f => f.Random.Number(1, 10))
// 可空 int?,80% 概率为 null
.RuleFor(o => o.LotNumber, f => f.Random.Int(0, 100).OrNull(f, .8f));
var userIds = 0;
var testUsers = new Faker()
// 自定义构造函数
.CustomInstantiator(f => new User(userIds++, f.Random.Replace("###-##-####")))
// 基本规则
.RuleFor(u => u.FirstName, f => f.Name.FirstName())
.RuleFor(u => u.LastName, f => f.Name.LastName())
.RuleFor(u => u.Avatar, f => f.Internet.Avatar())
.RuleFor(u => u.UserName, (f, u) => f.Internet.UserName(u.FirstName, u.LastName))
.RuleFor(u => u.Email, (f, u) => f.Internet.Email(u.FirstName, u.LastName))
.RuleFor(u => u.SomethingUnique, f => $"Value {f.UniqueIndex}")
.RuleFor(u => u.SomeGuid, Guid.NewGuid)
// 随机选取枚举
.RuleFor(u => u.Gender, f => f.PickRandom())
.RuleFor(u => u.CartId, f => Guid.NewGuid())
// 组合属性:利用已生成的 FirstName 和 LastName
.RuleFor(u => u.FullName, (f, u) => u.FirstName + " " + u.LastName)
// 嵌套集合生成
.RuleFor(u => u.Orders, f => testOrders.Generate(3))
// 生成完成后的回调
.FinishWith((f, u) =>
{
Console.WriteLine("User Created! Name={0}", u.FullName);
});
// 一次生成 3 个用户
return testUsers.Generate(count);
}
}
///
/// 订单实体
///
publicclassOrder
{
publicint OrderId { get; set; }
publicstring Item { get; set; }
publicint Quantity { get; set; }
publicint? LotNumber { get; set; }
}
///
/// 性别枚举
///
publicenum Gender
{
Male,
Female
}
///
/// 用户实体
///