dotnet-testing-autofixture-bogus-integration — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited dotnet-testing-autofixture-bogus-integration (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
| 面向 | AutoFixture | Bogus | 整合方案 |
|---|---|---|---|
| 資料真實感 | 低(GUID 格式字串) | 高(真實 Email/Phone) | 高 |
| 物件關聯處理 | 自動 | 手動 | 自動 |
| 循環參考處理 | 內建 | 無 | 整合 |
| 設定複雜度 | 低 | 中 | 中 |
| 適用場景 | 單元測試 | 整合測試/原型 | 兩者皆可 |
整合效果: user.Email 從 "Email1a2b3c4d" 變為 "[email protected]",其他屬性仍由 AutoFixture 自動填充。
<PackageReference Include="AutoFixture" Version="4.18.1" />
<PackageReference Include="AutoFixture.Xunit2" Version="4.18.1" />
<PackageReference Include="Bogus" Version="35.6.5" />
<PackageReference Include="xunit" Version="2.9.3" />
<PackageReference Include="AwesomeAssertions" Version="9.4.0" />| 整合方式 | 適用場景 | 複雜度 |
|---|---|---|
| 屬性層級 SpecimenBuilder | 特定屬性使用 Bogus | 低 |
| 類型層級 SpecimenBuilder | 整個類型使用 Bogus | 中 |
| 混合產生器 (HybridGenerator) | 統一 API 整合 | 中 |
| 整合工廠 (IntegratedFactory) | 完整測試場景建構 | 高 |
| 自訂 AutoData 屬性 | xUnit 整合 | 低 |
透過 ISpecimenBuilder 介面實現屬性層級與類型層級的整合:
Email、Phone、FirstName),使用 Bogus 產生對應的真實感資料User、Address)註冊 Bogus Faker 產生器| SpecimenBuilder | 產生資料類型 | Bogus API |
|---|---|---|
EmailSpecimenBuilder | Email 地址 | f.Internet.Email() |
PhoneSpecimenBuilder | 電話號碼 | f.Phone.PhoneNumber() |
NameSpecimenBuilder | 人名 | f.Name.FirstName() |
AddressSpecimenBuilder | 地址 | f.Address.FullAddress() |
fixture.WithBogus() — 註冊所有 Bogus SpecimenBuilderfixture.WithOmitOnRecursion() — 處理循環參考fixture.WithSeed(seed) — 設定隨機種子fixture.WithRepeatCount(count) — 設定 CreateMany 預設數量完整內容請參閱 references/core-integration-techniques.md
當物件存在循環參考(如 User → Company → Employees(User))時,使用 OmitOnRecursionBehavior 解決:
var fixture = new Fixture();
fixture.Behaviors.OfType<ThrowingRecursionBehavior>()
.ToList()
.ForEach(b => fixture.Behaviors.Remove(b));
fixture.Behaviors.Add(new OmitOnRecursionBehavior());效果: 避免 StackOverflowException,循環參考的屬性設為 null 或空集合。
public class BogusAutoDataAttribute : AutoDataAttribute
{
public BogusAutoDataAttribute()
: base(() => new Fixture().WithBogus())
{
}
}
// 使用方式
[Theory]
[BogusAutoData]
public void 使用整合資料測試(User user, Address address)
{
user.Email.Should().Contain("@");
address.City.Should().NotBeNullOrEmpty();
}統一的測試資料產生 API,實作 ITestDataGenerator 介面:
Generate<T>() — 產生單一物件Generate<T>(int count) — 產生指定數量的集合Generate<T>(Action<T> configure) — 產生物件後進行自訂設定完整場景建構工廠,支援進階功能:
CreateFresh<T>() — 每次產生全新物件CreateMany<T>(count) — 批次建立GetCached<T>() — 快取機制,相同類型只產生一次CreateTestScenario() — 建立包含 Company、Users、Orders 的完整測試場景,自動建立關聯統一 Fixture、Generator、Factory 的初始化與 Seed 管理,提供 Create<T>()、CreateMany<T>()、Create<T>(configure) 等便捷方法。
完整程式碼範例請參考 references/hybrid-generator-and-factory.md
由於 AutoFixture 和 Bogus 有不同的隨機數管理機制:
IntegratedTestDataFactory(seed: 12345) 確保穩定性Faker<User>().UseSeed(12345)AutoFixture 按照 Customizations 集合的順序匹配,先加入的 Builder 優先。使用 fixture.Customizations.Insert(0, builder) 可確保最高優先。
ISpecimenBuilder 實作Create() 方法中判斷屬性名稱或類型WithBogus() 擴充方法中註冊fixture.WithOmitOnRecursion().WithBogus()ISpecimenBuilder 實作類別檔案(如 EmailSpecimenBuilder.cs)FixtureBogusExtensions.cs)BogusAutoDataAttribute 供 xUnit Theory 測試使用OmitOnRecursionBehavior 處理循環參考~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.