Token导航 LogoToken导航

Agent Skill · 运维和基础设施

dotnet-testing-advanced-tunit-advanced(dotnet 测试高级 Tunit 高级)

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

dotnet-testing-advanced-tunit-advanced 是运维和基础设施类 Agent Skill,可用宿主为 Codex、Claude、Cursor、Gemini CLI,通过GitHub 仓库获取,权限为需要联网;许可证为 MIT,第三方扫描已通过,按安装量在运维和基础设施类的 2,449 个 Skill 里排第 1,483。

总安装 541周安装 23GitHub Stars 24下载 190核验 2026-05-01

安装说明

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

安装方式

通过对话安装

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

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

命令行安装

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

skills.shnpx skills
npx skills add https://github.com/kevintsengtw/dotnet-testing-agent-skills --skill dotnet-testing-advanced-tunit-advanced

这个 Skill 是做什么的

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

dotnet-testing-advanced-tunit-advanced 提供 TUnit 高级特性:数据驱动测试、DI 注入与矩阵组合。支持 MethodDataSource、ClassDataSource 及 Matrix Tests 提升用例覆盖率。

结合 Properties 标记实现分类过滤与优先级管理,优化测试执行效率。需 .NET 9.0+ 与 TUnit 最新预览版,注意 Source Generator 编译依赖。矩阵测试需控制参数数量防组合爆炸,建议配合条件跳过机制使用。

来源仓库内路径:skills/dotnet-testing-advanced-tunit-advanced

上手步骤

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-advanced-tunit-advanced 怎么安装?

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

dotnet-testing-advanced-tunit-advanced 支持哪些 AI 工具?

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

dotnet-testing-advanced-tunit-advanced 需要什么权限?

权限级别是需要联网。该 Skill 可能需要联网访问来源站点、仓库或外部 API;具体网络访问范围需要结合源码和 README 复核。

dotnet-testing-advanced-tunit-advanced 是免费的吗?

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

dotnet-testing-advanced-tunit-advanced 用的人多吗?

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

dotnet-testing-advanced-tunit-advanced 安全吗?

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

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

值得选的地方

  • 同时适配 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-advanced-tunit-advanced

dotnet 测试高级 Tunit 高级 · 本页

54124需要联网MIT通过

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

SKILL.md 原文

TUnit 進階應用:資料驅動測試、依賴注入與整合測試實戰

資料驅動測試進階技巧

TUnit 提供 MethodDataSource、ClassDataSource、Matrix Tests 三種進階資料來源。MethodDataSource 最靈活,支援動態產生與外部檔案載入;ClassDataSource 適合跨測試類別共享資料與 AutoFixture 整合;Matrix Tests 自動產生所有參數組合(注意控制數量避免爆炸性增長)。

完整範例與比較表請參閱 references/data-driven-testing.md

Properties 屬性標記與測試過濾

基本 Properties 使用

[Test]
[Property("Category", "Database")]
[Property("Priority", "High")]
public async Task DatabaseTest_高優先級_應能透過屬性過濾()
{
    await Assert.That(true).IsTrue();
}

[Test]
[Property("Category", "Unit")]
[Property("Priority", "Medium")]
public async Task UnitTest_中等優先級_基本驗證()
{
    await Assert.That(1 + 1).IsEqualTo(2);
}

[Test]
[Property("Category", "Integration")]
[Property("Priority", "Low")]
[Property("Environment", "Development")]
public async Task IntegrationTest_低優先級_僅開發環境執行()
{
    await Assert.That("Hello World").Contains("World");
}

建立一致的屬性命名規範

public static class TestProperties
{
    // 測試類別
    public const string CATEGORY_UNIT = "Unit";
    public const string CATEGORY_INTEGRATION = "Integration";
    public const string CATEGORY_E2E = "E2E";

    // 優先級
    public const string PRIORITY_CRITICAL = "Critical";
    public const string PRIORITY_HIGH = "High";
    public const string PRIORITY_MEDIUM = "Medium";
    public const string PRIORITY_LOW = "Low";

    // 環境
    public const string ENV_DEVELOPMENT = "Development";
    public const string ENV_STAGING = "Staging";
    public const string ENV_PRODUCTION = "Production";
}

[Test]
[Property("Category", TestProperties.CATEGORY_UNIT)]
[Property("Priority", TestProperties.PRIORITY_HIGH)]
public async Task ExampleTest_使用常數_確保一致性()
{
    await Assert.That(1 + 1).IsEqualTo(2);
}

TUnit 測試過濾執行

TUnit 使用 dotnet run 而不是 dotnet test:

# 只執行單元測試
dotnet run --treenode-filter "/*/*/*/*[Category=Unit]"

# 只執行高優先級測試
dotnet run --treenode-filter "/*/*/*/*[Priority=High]"

# 組合條件:執行高優先級的單元測試
dotnet run --treenode-filter "/*/*/*/*[(Category=Unit)&(Priority=High)]"

# 或條件:執行單元測試或冒煙測試
dotnet run --treenode-filter "/*/*/*/*[(Category=Unit)|(Suite=Smoke)]"

# 執行特定功能的測試
dotnet run --treenode-filter "/*/*/*/*[Feature=OrderProcessing]"

過濾語法注意事項:

  • 路徑模式 /*/*/*/* 代表 Assembly/Namespace/Class/Method 層級
  • 屬性名稱大小寫敏感
  • 組合條件必須用括號正確包圍

測試生命週期管理

TUnit 提供完整的生命週期鉤子:[Before(Class)] → 建構式 → [Before(Test)] → 測試方法 → [After(Test)] → Dispose → [After(Class)]。另有 Assembly/TestSession 層級與 [BeforeEvery]/[AfterEvery] 全域鉤子。建構式永遠最先執行,BeforeClass/AfterClass 各只執行一次。

完整屬性家族與範例請參閱 references/lifecycle-management.md

依賴注入模式

TUnit 依賴注入核心概念

TUnit 的依賴注入建構在 Data Source Generators 基礎上:

public class MicrosoftDependencyInjectionDataSourceAttribute : DependencyInjectionDataSourceAttribute<IServiceScope>
{
    private static readonly IServiceProvider ServiceProvider = CreateSharedServiceProvider();

    public override IServiceScope CreateScope(DataGeneratorMetadata dataGeneratorMetadata)
    {
        return ServiceProvider.CreateScope();
    }

    public override object? Create(IServiceScope scope, Type type)
    {
        return scope.ServiceProvider.GetService(type);
    }

    private static IServiceProvider CreateSharedServiceProvider()
    {
        return new ServiceCollection()
            .AddSingleton<IOrderRepository, MockOrderRepository>()
            .AddSingleton<IDiscountCalculator, MockDiscountCalculator>()
            .AddSingleton<IShippingCalculator, MockShippingCalculator>()
            .AddSingleton<ILogger<OrderService>, MockLogger<OrderService>>()
            .AddTransient<OrderService>()
            .BuildServiceProvider();
    }
}

使用 TUnit 依賴注入

[MicrosoftDependencyInjectionDataSource]
public class DependencyInjectionTests(OrderService orderService)
{
    [Test]
    public async Task CreateOrder_使用TUnit依賴注入_應正確運作()
    {
        // Arrange - 依賴已經透過 TUnit DI 自動注入
        var items = new List<OrderItem>
        {
            new() { ProductId = "PROD001", ProductName = "測試商品", UnitPrice = 100m, Quantity = 2 }
        };

        // Act
        var order = await orderService.CreateOrderAsync("CUST001", CustomerLevel.VIP會員, items);

        // Assert
        await Assert.That(order).IsNotNull();
        await Assert.That(order.CustomerId).IsEqualTo("CUST001");
        await Assert.That(order.CustomerLevel).IsEqualTo(CustomerLevel.VIP會員);
    }

    [Test]
    public async Task TUnitDependencyInjection_驗證自動注入_服務應為正確類型()
    {
        await Assert.That(orderService).IsNotNull();
        await Assert.That(orderService.GetType().Name).IsEqualTo("OrderService");
    }
}

TUnit DI vs 手動依賴建立比較

特性TUnit DI手動依賴建立
設定複雜度一次設定,重複使用每個測試都需要手動建立
可維護性依賴變更只需修改一個地方需要修改所有使用的測試
一致性與產品程式碼的 DI 一致可能與實際應用程式不一致
測試可讀性專注於測試邏輯被依賴建立程式碼干擾
範圍管理自動管理服務範圍需要手動管理物件生命週期
錯誤風險框架保證依賴正確注入可能遺漏或錯誤建立某些依賴

執行控制與測試品質

  • [Retry(n)]:僅用於外部依賴造成的不穩定測試(網路、檔案鎖定),不用於邏輯錯誤
  • [Timeout(ms)]:為效能敏感測試設定合理上限,搭配 Stopwatch 驗證 SLA
  • [DisplayName]:支援 {0} 參數插值,讓測試報告更貼近業務語言
完整範例(Retry/Timeout/DisplayName)請參閱 references/execution-control.md

ASP.NET Core 整合測試

在 TUnit 中使用 WebApplicationFactory<Program> 進行 ASP.NET Core 整合測試,透過實作 IDisposable 管理生命週期。涵蓋 API 回應驗證、Content-Type 標頭檢查,以及效能基準與並行負載測試。

完整 WebApplicationFactory 整合與負載測試範例請參閱 references/aspnet-integration.md

TUnit + Testcontainers 基礎設施編排

使用 [Before(Assembly)] / [After(Assembly)] 在 Assembly 層級管理 PostgreSQL、Redis、Kafka 等多容器編排,搭配 NetworkBuilder 建立共用網路。容器僅啟動一次,大幅減少啟動時間與資源消耗,同時保持測試間的資料隔離。

完整多容器編排與全域共享範例請參閱 references/tunit-testcontainers.md

TUnit Engine Modes

Source Generation Mode(預設模式)

████████╗██╗   ██╗███╗   ██╗██╗████████╗
╚══██╔══╝██║   ██║████╗  ██║██║╚══██╔══╝
   ██║   ██║   ██║██╔██╗ ██║██║   ██║
   ██║   ██║   ██║██║╚██╗██║██║   ██║
   ██║   ╚██████╔╝██║ ╚████║██║   ██║
   ╚═╝    ╚═════╝ ╚═╝  ╚═══╝╚═╝   ╚═╝

   Engine Mode: SourceGenerated

特色與優勢:

  • 編譯時期產生:所有測試發現邏輯在編譯時產生,不需要執行時反射
  • 效能優異:比反射模式快數倍
  • 型別安全:編譯時期驗證測試配置和資料來源
  • AOT 相容:完全支援 Native AOT 編譯

Reflection Mode(反射模式)

# 啟用反射模式
dotnet run -- --reflection

# 或設定環境變數
$env:TUNIT_EXECUTION_MODE = "reflection"
dotnet run

適用場景:

  • 動態測試發現
  • F# 和 VB.NET 專案(自動使用)
  • 某些依賴反射的測試模式

Native AOT 支援

<PropertyGroup>
    <PublishAot>true</PublishAot>
</PropertyGroup>
dotnet publish -c Release

常見問題與疑難排解

測試統計顯示異常問題

問題現象: 測試摘要: 總計: 0, 失敗: 0, 成功: 0

解決步驟:

  1. 確保專案檔設定正確:
<PropertyGroup>
    <IsTestProject>true</IsTestProject>
</PropertyGroup>
  1. 確保 GlobalUsings.cs 正確:
global using System;
global using System.Collections.Generic;
global using System.Linq;
global using System.Threading.Tasks;
global using TUnit.Core;
global using TUnit.Assertions;
global using TUnit.Assertions.Extensions;
  1. 整合測試的特殊設定:
// 在 WebApi 專案的 Program.cs 最後加上
public partial class Program { }  // 讓整合測試可以存取
  1. 清理和重建:
dotnet clean; dotnet build
dotnet test --verbosity normal

Source Generator 相關問題

問題:測試類別無法被發現

  • 解決:確保專案完全重建 (dotnet clean; dotnet build)

問題:編譯時出現奇怪錯誤

  • 解決:檢查是否有其他 Source Generator 套件,考慮更新到相容版本

診斷選項

# .editorconfig
tunit.enable_verbose_diagnostics = true
<PropertyGroup>
    <TUnitEnableVerboseDiagnostics>true</TUnitEnableVerboseDiagnostics>
</PropertyGroup>

實務建議

資料驅動測試的選擇策略

  • MethodDataSource:適合動態資料、複雜物件、外部檔案載入
  • ClassDataSource:適合共享資料、AutoFixture 整合、跨測試類別重用
  • Matrix Tests:適合組合測試,但要注意參數數量避免爆炸性增長

執行控制最佳實踐

  • Retry:只用於真正不穩定的外部依賴測試
  • Timeout:為效能敏感的測試設定合理限制
  • DisplayName:讓測試報告更符合業務語言

整合測試策略

  • 使用 WebApplicationFactory 進行完整的 Web API 測試
  • 運用 TUnit + Testcontainers 建立複雜多服務測試環境
  • 透過屬性注入系統管理複雜的依賴關係
  • 只測試實際存在的功能,避免測試不存在的端點

範本檔案

檔案名稱說明
data-source-examples.csMethodDataSource、ClassDataSource 範例
matrix-tests-examples.csMatrix Tests 組合測試範例
lifecycle-di-examples.cs生命週期管理與依賴注入範例
execution-control-examples.csRetry、Timeout、DisplayName 範例
aspnet-integration-tests.csASP.NET Core 整合測試範例
testcontainers-examples.csTestcontainers 基礎設施編排範例

輸出格式

  • 產生使用 MethodDataSource/ClassDataSource/Matrix Tests 的資料驅動測試類別(.cs 檔案)
  • 包含 MicrosoftDependencyInjectionDataSource 依賴注入設定
  • 包含 Retry/Timeout/DisplayName 執行控制範例
  • 產生 WebApplicationFactory 整合測試與 Testcontainers 多容器編排程式碼

參考資源

原始文章

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

  • Day 29 - TUnit 進階應用:資料驅動測試與依賴注入深度實戰

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

  • Day 30 - TUnit 進階應用 - 執行控制與測試品質和 ASP.NET Core 整合測試實戰

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

TUnit 官方資源

進階功能文件

Testcontainers 相關資源

相關技能

  • dotnet-testing-advanced-tunit-fundamentals - TUnit 基礎(前置技能)
  • dotnet-testing-advanced-aspnet-integration-testing - ASP.NET Core 整合測試
  • dotnet-testing-advanced-testcontainers-database - Testcontainers 資料庫測試

平台分布

Claude Code

29.34%
按下载量换算56

Gemini CLI

22.62%
按下载量换算43

Antigravity

15.14%
按下载量换算29

OpenCode

11.23%
按下载量换算21

windsurf

8.46%
按下载量换算16

github-copilot

3.4%
按下载量换算6

安全审计

Gen Agent Trust Hub

通过

Socket

通过

Snyk

通过

权限和风险

需要联网

该 Skill 可能需要联网访问来源站点、仓库或外部 API;具体网络访问范围需要结合源码和 README 复核。

安装前确认

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

继续浏览同类 Skills