用途
本技能用于在 .NET 测试与开发场景中生成测试数据,涵盖三种主要模式:使用 Bogus 生成逼真的随机假数据、使用测试构建器构造测试对象,以及在 ABP 框架中使用数据种子填充测试数据库。
适用场景包括:
- 为测试创建逼真的假数据
- 为测试构建复杂的对象图
- 填充测试数据库(Seeding)
- 生成开发数据
- 创建确定性测试夹具(Fixture)
主要能力
1. Bogus Faker Setup
通过 PackageReference 安装 Bogus(版本 35.*)。可设置随机种子以实现可复现测试,例如 Randomizer.Seed = new Random(Seed)。示例定义了 Patient、Doctor、Appointment 等多个 Faker,覆盖姓名、邮箱、电话、日期、地址、枚举随机取值等字段。
2. 高级 Bogus 模式
- 带关系的 Faker:允许传入已存在的 patientId、doctorId 参数
- 条件规则的 Faker:通过场景枚举(Adult、Minor、Elderly)生成不同年龄范围的数据
- 本地化 Faker:例如
new Faker<Patient>("pt_BR") - 唯一值生成:使用
f.Random.Replace("###-##-####")等
3. 测试构建器模式(Test Builder Pattern)
- 流式构建器:
PatientBuilder提供WithName、WithEmail、AsMinor、AsInactive、WithAppointments等方法,并支持隐式转换以便测试代码更简洁 - DTO 构建器:
CreatePatientDtoBuilder提供WithInvalidEmail、WithEmptyName等方法,便于构造非法输入并用 xUnit 验证校验错误
4. ABP 数据种子
- 测试数据种子:实现
IDataSeedContributor, ITransientDependency,在SeedAsync中先检查数据是否已存在,再插入确定性的测试数据;通过TestDataIds集中管理固定 GUID - 批量数据种子:根据
DataSeedContext中的BulkSeed属性生成大量数据,按 1000 条批量插入,用于性能测试(示例断言响应时间小于 500ms)
5. 测试夹具(Fixture)
DatabaseFixture 实现 IAsyncLifetime,使用内存数据库,在 InitializeAsync 中生成并填充测试数据,通过 IClassFixture<T> 在多个测试间共享。
使用方式
- 安装 Bogus:添加
<PackageReference Include="Bogus" Version="35.*" /> - 通过
Faker<T>定义实体生成规则,调用Generate(n)批量生成 - 通过构建器链式调用构造测试对象,最后调用
Build() - 在 ABP 中实现
IDataSeedContributor并在SeedAsync中插入数据 - 使用
IClassFixture<T>共享测试数据库上下文
另附 Quick Reference 表格,列出 Bogus Faker、Builder、Data Seeder、Fixture 四种模式对应的使用场景与示例;以及 Bogus Cheat Sheet,列出常用方法(f.Name.FullName()、f.Internet.Email()、f.Date.Past(years)、f.PickRandom<Enum>() 等)及其用途。
适用场景
- .NET 单元测试与集成测试中的数据准备
- ABP 框架项目的测试数据库初始化
- 需要可复现随机数据的回归测试
- 需要大量数据验证查询性能的性能测试
限制与关联
本技能页面未提供具体的收费、价格、平台限制等信息。相关技能包括 xunit-testing-patterns(测试结构与断言)、api-integration-testing(API 测试模式)、efcore-patterns(数据库测试)。