用途:在 .NET 测试中自动产生测试数据,减少手动建立对象与样板代码,实践匿名测试(关注行为而非具体数据)。
主要能力:Fixture.Create<T>() 产生单一对象并自动填充所有属性;CreateMany<T>() 产生集合,预设 3 个元素,可指定数量如 CreateMany<T>(10),全域可用 fixture.RepeatCount 调整;Build<T>() 搭配 .With(prop, value)、.With(prop, factory)、.Without(prop)、.OmitAutoProperties() 精确控制属性。复杂对象与集合属性会自动建构。
循环参考:物件存在循环参考(如 Category 的 Parent 指向自己)时,预设抛 ObjectCreationException;解法是移除 ThrowingRecursionBehavior 并加入 OmitOnRecursionBehavior,建议建立 AutoFixtureTestBase 基底类别统一处理。
xUnit 整合:可在测试类别建构函式用 Customize<T>() 设定共享规则;搭配 [Theory] + [InlineData],用 Build<T>().With() 针对情境设定关键属性。
安装:dotnet add package AutoFixture、dotnet add package AutoFixture.Xunit2(或 PackageReference,版本 4.18.1)。
适用场景:Entity 测试、DTO 验证、大量批次数据、服务层搭配 NSubstitute 产生 Mock 参数。
限制与原则:随机值不应被假设内容;影响逻辑的关键值应用 Build<T>().With() 明确固定;仍需测试边界值;简单测试用固定值可能更清楚。字符串预设为 GUID 格式,若要拟真数据可整合 Bogus。具体完整代码范例暂未提供。