Skip to content

v2.4.2 修正 AwesomeAssertions 幻覺 API 名稱

Latest

Choose a tag to compare

@kevintsengtw kevintsengtw released this 16 Aug 03:43
· 1 commit to main since this release

🐛 v2.4.2 修正 AwesomeAssertions 幻覺 API 名稱

本次修正 3 個 Skills8 處錯誤的斷言方法名稱。

⚠️ 這些名稱在 AwesomeAssertions 中並不存在。 複製受影響範本的使用者會直接遇到 CS1061 編譯錯誤。建議所有使用者更新。

🔍 為什麼會發生

這三個名稱是 FluentAssertions 5.x 時代的舊式命名。AwesomeAssertions 承接的是 FluentAssertions 7 的 API,只保留 ...ThanOrEqualTo 形式 —— 舊名少了中間的 Than

錯誤名稱(不存在) 正確名稱
BeGreaterOrEqualTo(n) BeGreaterThanOrEqualTo(n)
BeLessOrEqualTo(n) BeLessThanOrEqualTo(n)
HaveCountGreaterOrEqualTo(n) HaveCountGreaterThanOrEqualTo(n)

這類錯誤特別難以察覺 —— 名稱本身讀起來完全合理,語意也正確,只是那個版本的 API 從來沒有這樣命名過。它不會在文件審閱時被抓到,只會在使用者實際編譯時才爆出來。

🔬 查證方式

本次不是憑記憶或語感判斷

  • 以組件反射列舉 AwesomeAssertions 9.5.0 的 636 個公開成員名稱建立比對基準
  • 抽出全部 Skills 中含 .Should() 的敘述,逐一與成員集合比對
  • 一併反射確認 AwesomeAssertions.Web 的 54 個狀態碼斷言Be200OkBe201CreatedBe404NotFound 等)全部存在,並非誤用
  • 確認各 Skill 自訂的擴充方法(ExcludingAuditFieldsBeValidProduct 等)定義皆存在於同一 Skill 的 templates 內

📋 受影響的 Skills

Skill 處數 檔案
dotnet-testing-autodata-xunit-integration 5 references/collection-size-attribute.mdtemplates/advanced-patterns.cs(2 處)、templates/external-data-integration.cstemplates/autodata-attributes.cs
dotnet-testing-autofixture-customization 1 templates/dataannotations-integration.cs
dotnet-testing-bogus-fake-data 2 templates/basic-usage.cstemplates/advanced-patterns.cs

修正皆為單純的名稱替換,語意與斷言行為完全不變,不影響任何既有的正確用法。Skill 名稱、數量(29 個)、目錄結構均未更動,升級無相容性風險。

⚠️ 已知問題(尚未修正)

dotnet-testing-awesome-assertions-guidedotnet-testing-complex-object-comparison 另有同類的幻覺 API,本次未一併修正 —— 這兩個 Skill 正在進行 v3 全面重寫,屆時會整份取代。若您正在使用這兩個 Skill,請留意下列對應:

錯誤 正確
WithMaxRecursionDepth(n) AllowingInfiniteRecursion()
ExcludingNestedObjects Excluding(x => x.Child)
RespectingRuntimeTypes PreferringRuntimeMemberTypes()
HaveLengthGreaterThan(n) text.Length.Should().BeGreaterThan(n)
HaveLengthLessThanOrEqualTo(n) text.Length.Should().BeLessThanOrEqualTo(n)
BePositiveInfinity() / BeNegativeInfinity() Should().Be(double.PositiveInfinity) / Be(double.NegativeInfinity)

註:WithoutRecursing() 不是 ExcludingNestedObjects() 的替代品。實測確認其語意為「不再遞迴比較巢狀成員,改用該成員本身的相等性比較」,兩個內容相同但不同實例的巢狀物件加了它反而會失敗。要略過某個巢狀物件請用 Excluding(x => x.Child)

📎 其他

本版一併包含 v2.4.1 發佈後同步的 README 內容更新。

完整差異v2.4.1...v2.4.2