dotnet/skills run-tests技能指南:AI自动识别测试平台并执行测试
2026/9/3 13:48:48 网站建设 项目流程

dotnet/skills run-tests技能指南:AI自动识别测试平台并执行测试

【免费下载链接】skillsRepository for skills to assist AI coding agents with .NET and C#项目地址: https://gitcode.com/GitHub_Trending/skills17/skills

skills 是 .NET 团队维护的 AI 编程代理(AI Coding Agent)技能库,其dotnet-test插件中的run-tests 技能能让 AI 自动识别 .NET 项目的测试平台(VSTest / Microsoft.Testing.Platform,简称 MTP)、测试框架(MSTest、xUnit、NUnit、TUnit)与项目系统(SDK 风格 / 经典项目),并生成、执行一条与仓库完全兼容的dotnet test命令。对于新手来说,这意味着你只需用自然语言说"帮我跑一下测试",AI 就会替你解决平台、参数、过滤语法这些繁琐问题。

一、run-tests 技能是什么?

run-tests 是 dotnet-test 插件 中负责"测试执行"的核心技能,完整规则定义在 plugins/dotnet-test/skills/run-tests/SKILL.md。它同时回答两类问题:

你的需求技能的响应方式
"帮我运行测试"自动探测仓库命令并执行最小测试范围
"给我一条 dotnet test 命令"只检查必要文件,返回一条可直接运行的命令
"只跑 net9.0 / 某个类 / 某个分类"按目标框架、类、分类或 trait 精确过滤
"要 TRX 报告 / 崩溃转储 / 覆盖率"追加对应平台正确的报告与诊断参数

技能内部还有一条清晰的分工边界(见 SKILL.md 的作用范围表),避免 AI"越权":

  • 只识别平台、不执行 → 交给platform-detection技能
  • 热重载式"改代码-重跑"循环 → 交给mtp-hot-reload技能
  • 过滤语法不确定时才按需加载filter-syntax参考技能

💡 设计亮点:技能明确规定"不要为了保险先 build 一遍"(dotnet test默认会构建),也不会擅自给项目添加或升级测试包

二、自动识别测试平台:一张决策表看懂

AI 拿到你的请求后,会依次查看global.json.csprojpackages.configDirectory.Build.propsDirectory.Packages.props等文件(SKILL.md 输入清单),然后依据决策表选择正确的命令形态:

检测到的模式命令形态绝不能做的事
经典非 SDK 项目仓库脚本,或 MSBuild +vstest.console.exe/MSTest.exe假设dotnet test可用、擅自迁移
VSTest 模式dotnet test [项目] [VSTEST_OPTIONS]混入--report-trx等 MTP 专属参数
VSTest 桥接 MTPdotnet test [项目] -- [MTP_OPTIONS]漏掉--分隔符
原生 MTP(SDK 10+)dotnet test --project [项目] [MTP_OPTIONS]用位置参数传项目路径

几个新手最容易踩坑的细节,技能都已内置为硬性规则(决策表原文):

  • global.json决定的是dotnet test的命令模式,不等于实际执行平台;
  • --project只在 SDK 10+ 的原生 MTP 模式可用,VSTest 模式和 SDK 8/9 桥接模式必须用位置参数;
  • --framework--configuration--no-build等 dotnet/MSBuild 参数必须放在--分隔符之前

三、新手速查:常见测试命令示例

不同模式下"运行测试"的命令对比(摘自 SKILL.md 命令示例):

# VSTest 模式 dotnet test path/to/Tests.csproj # VSTest 桥接 MTP(SDK 8/9) dotnet test path/to/Tests.csproj -- <MTP_OPTIONS> # 原生 MTP 模式(SDK 10+) dotnet test --project path/to/Tests.csproj <MTP_OPTIONS> # 多目标框架项目:只跑 net9.0 dotnet test path/to/Tests.csproj --framework net9.0 -- <MTP_OPTIONS>

🔍按需过滤:只说"跑 OrderServiceTests 里的单元测试",AI 会自动翻译成该框架正确的过滤表达式,例如 VSTest 下组合类名与分类:

dotnet test --filter "FullyQualifiedName~OrderServiceTests&TestCategory=Unit"

各框架的过滤语法差异(详见 filter-syntax 参考):

平台 / 框架过滤方式
VSTest + MSTest / xUnit v2 / NUnit--filter "<属性表达式>"
MTP + MSTest / NUnit同样的表达式,桥接模式放--之后
MTP + xUnit v3--filter-class/--filter-method/--filter-trait,或一条--filter-query组合表达式
MTP + TUnit--treenode-filter路径表达式

四、报告与诊断:TRX、崩溃转储、覆盖率

测试跑挂了却"不知道为什么挂"?run-tests 会按平台追加正确的诊断参数(报告参数对照表):

想要的结果VSTest 参数MTP 参数
TRX 结果报告--logger "trx;LogFileName=xxx.trx"--report-trx
诊断日志--diag <file>--diagnostic --diagnostic-output-directory <dir>
崩溃转储--blame-crash--crashdump
挂起(Hang)转储--blame-hang --blame-hang-timeout 5min--hangdump --hangdump-timeout 5min
代码覆盖率--collect "Code Coverage"--coverage

例如测试偶发卡死,对 AI 说"加 5 分钟超时抓一下挂起的测试",它在 SDK 10 原生 MTP 项目上会给出:

dotnet test --project Tests.csproj --report-trx --hangdump --hangdump-timeout 5min

五、经典 .NET Framework 项目也能跑

老项目(packages.config、net472、显式<Compile Include>)是很多团队的现实。run-tests 的立场非常克制:不迁移、不升级,沿用仓库自己的工具链

nuget restore MySolution.sln MSBuild.exe MySolution.sln /t:Build /p:Configuration=Debug vstest.console.exe path\to\MyTests.dll /TestAdapterPath:path\to\adapter\build\<tfm>

(经典项目命令序列原文)若缺少必要工具链,技能会明确告诉你缺什么,而绝不会谎称测试已经跑过

六、如何安装与使用

1. 获取仓库(仓库为只读,可直接克隆到本地):

git clone https://gitcode.com/GitHub_Trending/skills17/skills

2. 在 AI 编程代理中安装插件(步骤见 README.md):

  • Copilot CLI / Claude Code/plugin marketplace add dotnet/skills,然后/plugin install dotnet-test@dotnet-agent-skills,重启后用/skills查看已加载技能;
  • VS Code:在settings.json中启用chat.plugins.enabled并添加dotnet/skills市场,之后在 Copilot Chat 中用/plugins安装。

3. 使用:打开你的 .NET 项目,直接对 AI 说"帮我运行测试"或"给我只跑 net9.0 的 dotnet test 命令",技能即自动激活(插件清单见 plugin.json)。

七、质量保障:技能如何被验证

技能的行为并非"凭感觉",而是由一套自动化评测约束。tests/dotnet-test/run-tests/eval.yaml 定义了覆盖经典项目、VSTest、桥接/原生 MTP、xUnit v3、NUnit、TUnit、多目标框架、组合过滤、诊断与 TRX 等二十余个场景的测试用例,逐一断言 AI 输出的命令是否与平台匹配、是否混用参数、是否违规执行。下图是仓库中技能评估流水线输出的结果报告示例,可以直观看到每个技能的评测指标:

技能的输出契约(Output contract)同样严格:执行请求必须回报Passed: N, Failed: N, Skipped: N的真实汇总;过滤运行必须核对实际执行的测试名与数量,过滤被忽略时要修正语法并重跑,而不是报假成功。

八、相关技能速查

技能作用位置
platform-detection只识别项目的测试平台与框架plugins/dotnet-test/skills/platform-detection/
filter-syntax各框架过滤语法参考(被 run-tests 按需加载)plugins/dotnet-test/skills/filter-syntax/
mtp-hot-reloadMTP 热重载,改代码免重跑plugins/dotnet-test/skills/mtp-hot-reload/
coverage-analysis覆盖率收集 + CRAP 风险评分plugins/dotnet-test/skills/coverage-analysis/
dotnet-test-migration测试框架/平台迁移(MSTest、xUnit 升级等)plugins/dotnet-test-migration/

九、常见问题 FAQ

Q1:只想看命令,不想让 AI 真正执行,可以吗?可以。明确说"不要运行,只给我命令",技能会只检查必要的文件、返回一条可运行命令加一句简短语法说明,不做 restore、不构建、不执行。

Q2:为什么 AI 之前给我的--report-trx在 VSTest 项目上报错?--report-trx是 MTP 专属参数。VSTest 模式应使用--logger "trx;LogFileName=xxx.trx"。run-tests 的评测用例专门拦截了这种跨平台混用(见 eval.yaml 的 TRX 场景)。

Q3:测试挂起、崩溃怎么办?直接描述症状,例如"测试偶发卡死,帮我抓 5 分钟超时的转储",技能会自动选择该平台的正确参数(--blame-hang/--hangdump)。

Q4:只识别"这个项目用的是什么测试平台",会顺便把测试跑了吗?不会。仅识别类请求会路由给platform-detection,不会进入执行流程。

十、小结

  • run-tests 技能把"跑 .NET 测试"中最难的平台与框架识别交给了 AI:VSTest、MTP 桥接、原生 MTP 与经典项目四种形态都能正确处理;
  • 命令示例、过滤语法、TRX / 诊断 / 覆盖率参数都有平台对照表约束,避免跨平台参数混用的经典错误;
  • 技能行为由 tests/dotnet-test/run-tests/eval.yaml 的自动化评测持续验证,输出结果真实可核对;
  • 配合 platform-detection、mtp-hot-reload、coverage-analysis 等兄弟技能,构成完整的 .NET 测试工作流。

安装好 dotnet-test 插件后,下一次"帮我跑测试",就交给 AI 吧 🚀

【免费下载链接】skillsRepository for skills to assist AI coding agents with .NET and C#项目地址: https://gitcode.com/GitHub_Trending/skills17/skills

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询