Token导航 LogoToken导航

Agent Skill · 运维和基础设施

dotnet-testing-awesome-assertions-guide(dotnet 测试很棒的断言指南)

用于辅助测试设计、自动化测试、用例整理和回归验证。它适合让 Agent 编写单元测试、端到端测试、测试计划或根据失败日志定位问题。使用时需要确认项目测试框架、运行命令和夹具数据,避免为了通过测试而改坏真实逻辑;涉及浏览器或外部服务时,应区分本地模拟、测试环境和生产环境。

dotnet-testing-awesome-assertions-guide 是运维和基础设施类 Agent Skill,可用宿主为 Codex、Claude、Cursor、Gemini CLI,通过GitHub 仓库获取,权限为操作浏览器;许可证为 MIT,第三方扫描已通过,按安装量在运维和基础设施类的 2,449 个 Skill 里排第 1,347。

总安装 642周安装 27GitHub Stars 24下载 225核验 2026-05-01

安装说明

本站只整理中文说明,不托管安装包,也不代用户安装。
GitHub
许可证
MIT

安装方式

通过对话安装

复制提示词发给支持本地命令或 Skills 的 AI 助手,先确认命令和权限,再让它执行。

请帮我安装这个 Agent Skill:dotnet-testing-awesome-assertions-guide(dotnet 测试很棒的断言指南)
来源仓库:https://github.com/kevintsengtw/dotnet-testing-agent-skills
仓库路径:skills/dotnet-testing-awesome-assertions-guide
安装命令:
npx skills add https://github.com/kevintsengtw/dotnet-testing-agent-skills --skill dotnet-testing-awesome-assertions-guide
安装前请先检查当前环境是否支持对应 CLI,并向我确认将要执行的命令、安装目录、联网范围和文件读写权限;确认后再执行。

命令行安装

复制命令到本机终端执行。不同来源提供的安装方式可能略有差异;本站展示可直接复制的安装命令,安装前请核对来源页面。

skills.shnpx skills
npx skills add https://github.com/kevintsengtw/dotnet-testing-agent-skills --skill dotnet-testing-awesome-assertions-guide

这个 Skill 是做什么的

运维和基础设施类 Skill 处理部署、监控、日志和云资源,多数需要较高的执行权限。

dotnet-testing-awesome-assertions-guide 提供 AwesomeAssertions 流畅断言语法完整指南。作为 FluentAssertions 的免费分支,Apache 2.0 授权适合商业项目。支持对象等价比较、集合包含、时间差容忍度等高级验证场景。

需单独安装 NuGet 包并引入 AwesomeAssertions 命名空间。错误信息详尽直观,显著优于原生 Assert.AreEqual 的失败提示。

来源仓库内路径:skills/dotnet-testing-awesome-assertions-guide

上手步骤

4 步
  1. 1

    确认自己的宿主工具

    公开资料标注支持 Codex、Claude、Cursor、Gemini CLI;先确认自己用的是其中之一,再按对应工具的 Skills 目录放置。

  2. 2

    拿到安装命令

    可以直接复制的命令是 npx skills add https://github.com/kevintsengtw/dotnet-testing-agent-skills --ski…;命令里的占位符换成自己的路径或密钥再执行。

  3. 3

    安装后重启宿主

    命令执行完要完全退出宿主工具再打开,让新装的 Skill 被重新扫描到,否则列表里可能看不到。

  4. 4

    按最小权限试用

    它需要操作浏览器,先在测试目录或测试账号里跑,确认没问题再放到正式项目。

常见问题

6 条

dotnet-testing-awesome-assertions-guide 怎么安装?

在终端执行 npx skills add https://github.com/kevintsengtw/dotnet-testing-agent-skills --skill dotnet-…。装完完全退出宿主工具再打开,让它重新扫描本地 Skill。

dotnet-testing-awesome-assertions-guide 支持哪些 AI 工具?

公开资料标注支持 Codex、Claude、Cursor、Gemini CLI。其他工具只要能读取本地 Skill 目录,一般也能手动放进去,但要自己确认触发方式是否一致。

dotnet-testing-awesome-assertions-guide 需要什么权限?

权限级别是操作浏览器。该 Skill 可能涉及浏览器控制能力,使用时可能读取或操作网页内容,需要在受控环境中确认权限边界。

dotnet-testing-awesome-assertions-guide 是免费的吗?

来源标注的许可证是 MIT。本站不代收任何费用,也不托管安装包;能否商用、要不要署名,以许可证原文为准。

dotnet-testing-awesome-assertions-guide 用的人多吗?

公开数据是累计安装 642 次,近一周安装 27 次,下载 225 次,GitHub 24 星。这些数字来自第三方目录统计,只能当作热度参考,不代表质量或安全性。

dotnet-testing-awesome-assertions-guide 安全吗?

第三方扫描结果为通过,但这只覆盖已知的静态检查项,不能替代自己读一遍源码和安装命令。

值得选的地方和要先想清楚的地方

值得选的地方

  • 同时适配 4 种工具,换客户端不用重新找替代品。
  • 3 个目录同时收录,说明这个 Skill 流传比较广。
  • 许可证明确为 MIT,商用和分发边界好判断。
  • 第三方扫描已通过,常见的高风险行为没有命中。

先想清楚的地方

  • 第三方目录整理,版本更新和行为细节以来源仓库为准。

适不适合你

更适合

  • 已经在用 Codex,想直接扩展它能力的人。
  • 需要处理运维和基础设施类任务、又不想每次都手写提示词的人。
  • 需要许可证清楚、并且有第三方扫描结果的团队项目。

不太适合

  • 需要厂商级技术支持和 SLA 的生产系统。

运维和基础设施类 Skill 对比

6 个同类
Skill总安装GitHub 星权限许可证扫描
brainstorming

头脑风暴 · Codex、Claude

3,148,776173,131操作浏览器MIT通过
copywriting

文案写作 · Codex、Claude

1,996,72425,583需要联网MIT通过
openclaw-secure-linux-cloud

OpenClaw secure linux cloud 命令行 · Codex、Claude

1,853,08840接触敏感数据未明确未通过
xget

xget 命令行 · Codex、Claude

1,799,28040执行命令未明确未通过
requesting-code-review

代码审查请求 · Codex、Claude

1,590,144173,103权限未标注MIT通过
dotnet-testing-awesome-assertions-guide

dotnet 测试很棒的断言指南 · 本页

64224操作浏览器MIT通过

按安装量取同分类前几名;数字来自第三方目录统计,只作热度参考,不代表质量结论。

SKILL.md 原文

AwesomeAssertions 流暢斷言指南

本技能提供使用 AwesomeAssertions 進行高品質測試斷言的完整指南,涵蓋基礎語法、進階技巧與最佳實踐。

關於 AwesomeAssertions

AwesomeAssertions 是 FluentAssertions 的社群分支版本,使用 Apache 2.0 授權,完全免費且無商業使用限制。

核心特色

  • 完全免費:Apache 2.0 授權,適合商業專案使用
  • 流暢語法:支援方法鏈結的自然語言風格
  • 豐富斷言:涵蓋物件、集合、字串、數值、例外等各種類型
  • 優秀錯誤訊息:提供詳細且易理解的失敗資訊
  • 高性能:優化的實作確保測試執行效率
  • 可擴展:支援自訂 Assertions 方法

與 FluentAssertions 的關係

AwesomeAssertions 是 FluentAssertions 的社群 fork,主要差異:

項目FluentAssertionsAwesomeAssertions
授權商業專案需付費Apache 2.0(完全免費)
命名空間FluentAssertionsAwesomeAssertions
API 相容性原版高度相容
社群支援官方維護社群維護

安裝與設定

NuGet 套件安裝

# .NET CLI
dotnet add package AwesomeAssertions

# Package Manager Console
Install-Package AwesomeAssertions

csproj 設定(推薦)

<ItemGroup>
  <PackageReference Include="AwesomeAssertions" Version="9.4.0" PrivateAssets="all" />
</ItemGroup>

命名空間引用

using AwesomeAssertions;
using Xunit;

核心 Assertions 語法

所有 Assertions 皆以 .Should() 開始,搭配流暢方法鏈結。

類別常用方法說明
物件NotBeNull(), BeOfType<T>(), BeEquivalentTo()空值、類型、相等性檢查
字串Contain(), StartWith(), MatchRegex(), BeEquivalentTo()內容、模式、忽略大小寫比對
數值BeGreaterThan(), BeInRange(), BeApproximately()比較、範圍、浮點精度
數值集合EqualApproximately(), NotEqualApproximately()數值集合近似比對(9.4+)
集合HaveCount(), Contain(), BeEquivalentTo(), AllSatisfy()數量、內容、順序、條件
例外Throw<T>(), NotThrow(), WithMessage(), WithInnerException()例外類型、訊息、巢狀例外
非同步ThrowAsync<T>(), CompleteWithinAsync()非同步例外與完成驗證
完整語法範例與程式碼請參閱 references/core-assertions-syntax.md

進階技巧:複雜物件比對

使用 BeEquivalentTo() 搭配 options 進行深度物件比較:

  • 排除屬性:options.Excluding(u => u.Id) — 排除自動生成欄位
  • 動態排除:options.Excluding(ctx => ctx.Path.EndsWith("At")) — 按模式排除
  • 循環參考:options.IgnoringCyclicReferences().WithMaxRecursionDepth(10)

進階技巧:自訂 Assertions 擴展

建立領域特定擴展方法,如 product.Should().BeValidProduct(),以及可重用排除擴展如 ExcludingAuditFields()。

參考 templates/custom-assertions-template.cs 瞭解完整實作。

完整範例請參閱 references/complex-object-assertions.md

效能最佳化策略

  • 大量資料:先用 HaveCount() 快速檢查數量,再抽樣驗證(避免全量 BeEquivalentTo)
  • 選擇性比對:使用匿名物件 + ExcludingMissingMembers() 只驗證關鍵屬性
// 選擇性屬性比對 — 只驗證關鍵欄位
order.Should().BeEquivalentTo(new
{
    CustomerId = 123,
    TotalAmount = 999.99m,
    Status = "Pending"
}, options => options.ExcludingMissingMembers());

9.2-9.4 版本新功能

數值集合近似比對 — [Not]EqualApproximately(9.4+)

針對 INumber<T> 數值集合,新增近似相等斷言(需.NET 8+):

// 驗證數值集合在容差範圍內近似相等
var actual = new[] { 1.001f, 2.002f, 3.003f };
actual.Should().EqualApproximately(new[] { 1f, 2f, 3f }, 0.01f);

// 驗證集合不在容差範圍內近似相等
actual.Should().NotEqualApproximately(new[] { 10f, 20f, 30f }, 0.01f);
與 BeApproximately() 的差異:BeApproximately() 用於單一數值,EqualApproximately() 用於數值集合,會逐一比對每個元素。當容差為 0 時,EqualApproximately 的行為等同於 Equal。

集合格式化最大項目數設定(9.4+)

斷言失敗時,集合預設顯示前 32 個項目。現在可透過 FormattingOptions 自訂:

// 在 AssertionScope 中設定集合顯示上限
using var scope = new AssertionScope();
scope.FormattingOptions.MaxItems = 100; // 預設為 32

largeCollection.Should().BeEquivalentTo(expected);

也可透過自訂 Formatter 覆寫:

class LargeCollectionFormatter : EnumerableValueFormatter
{
    protected override int MaxItems => 100;
    public override bool CanHandle(object value) => value is IEnumerable<MyEntity>;
}

集合出現次數約束(9.2+)

Contain 方法新增出現次數約束:

var numbers = new[] { 1, 2, 2, 3, 3, 3 };
numbers.Should().Contain(2, AtLeast.Once());
numbers.Should().Contain(3, Exactly.Times(3));

Null 安全性改善 — [return: NotNull](9.4+)

所有 Should() 和斷言方法加入 [return: NotNull] 標註,讓編譯器的 nullable 分析正確追蹤:

// 9.4 前:Should() 後仍視為可能 null,需加 ! 運算子
var user = GetUser();
user.Should().NotBeNull();
user!.Name.Should().Be("test"); // 需要 ! 消除警告

// 9.4 後:Should().NotBeNull() 返回帶 [NotNull] 標註,編譯器自動推斷非 null
user.Should().NotBeNull();
user.Name.Should().Be("test"); // 不再需要 !

排除成員名稱(9.3+)

BeEquivalentTo 支援按名稱排除成員:

actual.Should().BeEquivalentTo(expected, options => options
    .Excluding(ctx => ctx.Name == "InternalState"));

最佳實踐與團隊標準

測試命名規範

遵循 方法_情境_預期結果 模式(如 CreateUser_有效電子郵件_應回傳啟用的使用者)。

錯誤訊息優化

在斷言中加入 because 字串,提供清晰的失敗上下文:

result.IsSuccess.Should().BeFalse("because negative payment amounts are not allowed");

AssertionScope 使用

使用 AssertionScope 收集多個失敗訊息,一次顯示所有問題:

using (new AssertionScope())
{
    user.Should().NotBeNull("User creation should not fail");
    user.Id.Should().BeGreaterThan(0, "User should have valid ID");
    user.Email.Should().NotBeNullOrEmpty("Email is required");
}

常見情境與解決方案

情境關鍵技巧
API 回應驗證BeEquivalentTo() + Including() 選擇性比對
資料庫實體驗證BeEquivalentTo() + Excluding() 排除自動生成欄位
事件驗證訂閱捕獲事件後逐一驗證屬性
完整程式碼範例請參閱 references/common-scenarios.md

疑難排解

問題 1:BeEquivalentTo 失敗但物件看起來相同

原因:可能包含自動生成欄位或時間戳記

解決方案:

// 排除動態欄位
actual.Should().BeEquivalentTo(expected, options => options
    .Excluding(x => x.Id)
    .Excluding(x => x.CreatedAt)
    .Excluding(x => x.UpdatedAt)
);

問題 2:集合順序不同導致失敗

原因:集合順序不同

解決方案:

// 使用 BeEquivalentTo 忽略順序
actual.Should().BeEquivalentTo(expected); // 不檢查順序

// 或明確指定需要檢查順序
actual.Should().Equal(expected); // 檢查順序

問題 3:浮點數比較失敗

原因:浮點數精度問題

解決方案:

// 單一數值使用精度容差
actualValue.Should().BeApproximately(expectedValue, 0.001);

// 數值集合使用 EqualApproximately(9.4+,需 .NET 8+)
actualValues.Should().EqualApproximately(expectedValues, 0.001);

何時使用此技能

適用情境

撰寫單元測試或整合測試時 需要驗證複雜物件結構時 比對 API 回應或資料庫實體時 需要清晰的失敗訊息時 建立領域特定測試標準時

不適用情境

效能測試(使用專用 benchmarking 工具) 負載測試(使用 K6、JMeter 等) UI 測試(使用 Playwright、Selenium)


與其他技能的配合

與 unit-test-fundamentals 搭配

先使用 unit-test-fundamentals 建立測試結構,再使用本技能撰寫斷言:

[Fact]
public void Calculator_Add_兩個正數_應回傳總和()
{
    // Arrange - 遵循 3A Pattern
    var calculator = new Calculator();

    // Act
    var result = calculator.Add(2, 3);

    // Assert - 使用 AwesomeAssertions
    result.Should().Be(5);
}

與 test-naming-conventions 搭配

使用 test-naming-conventions 的命名規範,搭配本技能的斷言:

[Fact]
public void CreateUser_有效資料_應回傳啟用使用者()
{
    var user = userService.CreateUser("test@example.com");

    user.Should().NotBeNull()
        .And.BeOfType<User>();
    user.IsActive.Should().BeTrue();
}

與 xunit-project-setup 搭配

在 xunit-project-setup 建立的專案中安裝並使用 AwesomeAssertions。


輸出格式

  • 產生使用 AwesomeAssertions 流暢語法的測試斷言
  • 使用 Should().Be/BeEquivalentTo/Contain 等方法鏈
  • 包含物件比對、集合驗證、例外斷言範例
  • 提供.csproj 套件參考(AwesomeAssertions)

參考資源

原始文章

本技能內容提煉自「老派軟體工程師的測試修練 - 30 天挑戰」系列文章:

  • Day 04 - AwesomeAssertions 基礎應用與實戰技巧

- 鐵人賽文章:https://ithelp.ithome.com.tw/articles/10374188 - 範例程式碼:https://github.com/kevintsengtw/30Days_in_Testing_Samples/tree/main/day04

  • Day 05 - AwesomeAssertions 進階技巧與複雜情境應用

- 鐵人賽文章:https://ithelp.ithome.com.tw/articles/10374425 - 範例程式碼:https://github.com/kevintsengtw/30Days_in_Testing_Samples/tree/main/day05

官方資源

相關文章


總結

AwesomeAssertions 提供了強大且可讀的斷言語法,是撰寫高品質測試的重要工具。透過:

  1. 流暢語法:讓測試程式碼更易讀
  2. 豐富斷言:涵蓋各種資料類型(9.4 新增數值集合近似比對)
  3. 自訂擴展:建立領域特定斷言
  4. 效能優化:處理大量資料情境(9.4 新增集合顯示上限設定)
  5. 完全免費:Apache 2.0 授權無商業限制
  6. Null 安全:9.4 起 [return: NotNull] 改善 nullable 分析

記住:好的斷言不僅能驗證結果,更能清楚表達預期行為,並在失敗時提供有用的診斷資訊。

參考 templates/assertion-examples.cs 查看更多實用範例。

平台分布

Claude Code

28.62%
按下载量换算64

Gemini CLI

22.19%
按下载量换算50

Antigravity

20.19%
按下载量换算45

OpenCode

14.4%
按下载量换算32

windsurf

7.62%
按下载量换算17

github-copilot

4.02%
按下载量换算9

安全审计

Gen Agent Trust Hub

通过

Socket

通过

Snyk

通过

权限和风险

操作浏览器

该 Skill 可能涉及浏览器控制能力,使用时可能读取或操作网页内容,需要在受控环境中确认权限边界。

安装前确认

本站仅展示第三方公开信息,不托管安装包,不提供自动安装或运行环境。安装前应自行审查源码、依赖和命令行为。

继续浏览同类 Skills