dotnet/skills一键升级MSTest:v1/v2到v3迁移完全指南
【免费下载链接】skillsRepository for skills to assist AI coding agents with .NET and C#项目地址: https://gitcode.com/GitHub_Trending/skills17/skills
还在手动排查 MSTest 升级后的编译错误吗?开源项目dotnet/skills是 .NET 团队为 AI 编码助手(Coding Agent)整理的官方技能库,其中dotnet-test-migration插件可以一键引导完成 MSTest v1/v2 到 v3 的测试框架迁移——自动识别版本、处理破坏性变更、替换.testsettings配置文件,最后跑通全部测试。本文面向新手,带你完整走一遍升级路线 🚀
插件是什么:dotnet-test-migration 概览
该插件位于 plugins/dotnet-test-migration/,包含 5 个迁移技能和 1 个编排 Agent:
| 组件 | 作用 |
|---|---|
migrate-mstest-v1v2-to-v3 | 本文主角:MSTest v1/v2 升级到 v3 |
migrate-mstest-v3-to-v4 | 后续升级到 v4 |
migrate-xunit-to-mstest | xUnit 项目转换为 MSTest |
migrate-vstest-to-mtp | 测试运行器迁移到 MTP |
| test-migration Agent | 自动检测框架/版本并路由到正确技能 |
详细说明见 plugins/dotnet-test-migration/README.md。
快速安装:一键添加 dotnet/skills 插件
在 Copilot CLI 或 Claude Code 中执行:
/plugin marketplace add dotnet/skills /plugin install dotnet-test-migration@dotnet-agent-skills也可以克隆仓库到本地参考:
git clone https://gitcode.com/GitHub_Trending/skills17/skills安装后重启,用/skills查看可用技能列表 ✅
先做判断:如何识别你的项目是 MSTest v1 还是 v2?
升级前第一步永远是确认当前版本。AI 助手会自动读取项目文件完成检测,你也可以自查:
| 判断依据 | 版本 | 迁移路径 |
|---|---|---|
项目引用Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll | MSTest v1(程序集引用) | 先删引用,再加 v3 包 |
MSTest.TestFramework/MSTest.TestAdapter为1.x–2.xNuGet 包 | MSTest v2 | 直接改包版本到 3.x |
⚠️ 两条路径在"添加 v3 包"这一步汇合,之后的破坏性变更处理完全相同。检测规则详见 agents/test-migration.agent.md 中的路由表。
必知的 5 大破坏性变更:升级 v3 前必读
MSTest v3与 v1/v2 不二进制兼容,以下是最容易踩坑的变更(摘自 SKILL.md 的破坏性变更清单):
Assert.AreEqual(object, object)重载被移除只剩泛型版本AreEqual<T>(T?, T?)。当两个参数无法推断出公共类型时会报CS0411/CS1503。修复方式:只给编译报错的调用显式加类型参数,例如Assert.AreEqual<object>(expected, actual),不要把整个文件都改成<object>——那会丢掉 v3 新增的类型检查。DataRow 严格类型匹配这是最隐蔽的坑:项目照样能编译(只有
MSTEST0014警告),但运行时抛"Test data doesn't match method parameters"。把字面量改成与参数完全一致的类型即可:int参数传1而不是1L,float参数传1.0f而不是1.0。记住:必须跑测试验证,绿色编译说明不了问题。.testsettings配置文件不再受支持删除旧文件、新建等价的.runsettings,且所有 MSTest 配置统一放在一个<MSTest>元素下。注意TestTimeout(每测试超时)不要误写成TestSessionTimeout(全会话超时)。移除了部分目标框架.NET 5 需升到 net8.0(LTS)或 net6.0+;.NET Framework 低于 4.6.2 升到 net462;netstandard1.0 升到 netstandard2.0。net6.0/net8.0/net9.0 均受支持,不要改动已经支持的 TFM。
行为类变更(不报编译错误)测试 ID 生成规则改变(CI 按 ID 过滤/播放列表会重置)、
TargetInvocationException被解包、部署目录行为统一等——升级后要关注测试数量对比与 CI 历史。
推荐升级路径:选对包模型,一次到位
- 默认方案——MSTest 元包:移除零散的
MSTest.TestFramework/MSTest.TestAdapter,统一引用MSTest元包(如 3.8.0)。若项目仍用 VSTest,保留Microsoft.NET.Test.Sdk并升到兼容版本,否则会报NU1605。 - 进阶方案——MSTest.Sdk:把项目 SDK 改为
MSTest.Sdk/3.8.0,框架、适配器、分析器自动配齐。⚠️ 它默认使用 Microsoft.Testing.Platform(MTP);如果你必须留在 VSTest,要显式设置<UseVSTest>true</UseVSTest>,不要因为升级框架就顺手切换测试运行器。 - 中央包管理项目请改
Directory.Packages.props,而不是在.csproj里内联版本号。
完整 7 步工作流(评估→删 v1 引用→换包→改 TFM→修断言→换 runsettings→验证)都在 skills/migrate-mstest-v1v2-to-v3/SKILL.md 里写好了。
让 AI 替你执行:一句话触发完整迁移
这是本插件最爽的地方——把测试项目放进工作目录,直接对 AI 助手说:
"把这个 MSTest v2 项目升级到 v3,改完编译并跑测试验证。"
test-migrationAgent 会自动完成:检测框架与版本 → 路由到迁移技能 → 修改文件 → 构建运行 → 对比迁移前后的通过/失败数量。它内置了严格的边界闸门:如果项目已经是干净的 v3,它会直接告诉你"迁移已完成"而不乱改代码。
上图是仓库内置评测基础设施对测试类技能的评估报告示例:每个技能只有通过可信的基线对比才能判定为"改进有效",保证迁移技能的可靠性。
迁移技能的行为由 tests/dotnet-test-migration/migrate-mstest-v1v2-to-v3/eval.yaml 中的 10 个真实场景验收,覆盖 v1 程序集引用、CS0411 修复、DataRow 类型不匹配、.testsettings迁移、被移除的 TFM 处理,以及"项目已是 v3 时停止操作"等边界情况。
迁移完成验收清单
- MSTest v3 包(或 MSTest.Sdk)引用正确,v1/v2 引用与 QualityTools 已清除
- 项目零错误编译
dotnet test全部通过,且通过/失败数量与迁移前基线一致- 无遗留
.testsettings或<LegacySettings> - 测试运行器(VSTest/MTP)保持升级前不变
下一步:从 v3 继续走向 v4
迁移到 v3 只是第一站。继续升级到 MSTest v4(处理Custom TestMethodAttribute、DisplayName、TestTimeout等变更)请使用 skills/migrate-mstest-v3-to-v4/SKILL.md,Agent 也能编排"v1 → v3 → v4"的多步升级 🎯
总结:用 dotnet/skills 的dotnet-test-migration插件,MSTest 升级不再是"背发布说明"的苦差事——AI 帮你检测版本、修好断言、换掉配置文件、跑绿测试,你只需要验收结果。
【免费下载链接】skillsRepository for skills to assist AI coding agents with .NET and C#项目地址: https://gitcode.com/GitHub_Trending/skills17/skills
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考