SuperAPI AI 工具集

test-data-generation

测试与质量

查看项目

更新于 10-16 04:41

技能介绍

用途

本技能用于在 .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(数据库测试)。