SuperAPI AI 工具集

migrate-vstest-to-mtp

测试与质量

查看项目

更新于 10-16 00:32

技能介绍

用途:把 .NET 测试解决方案从 VSTest 迁移到 Microsoft.Testing.Platform(MTP),使所有测试项目运行在 MTP 上、dotnet test 正常工作,并同步更新 CI/CD 流水线。注意:同一解决方案或运行配置中不可混用 VSTest 与 MTP 测试项目,该场景不受支持。

适用:从 VSTest 切换到 MTP;为测试项目启用 dotnet run / dotnet watch / 直接执行可执行文件;启用 Native AOT 或裁剪测试;用 dotnet test 替代 vstest.console.exe;把 CI 的 VSTest 任务换成 .NET Core CLI 任务;将 dotnet test 参数从 VSTest 语法改为 MTP 语法。不适用:项目已在 MTP 上且无遗留差异;测试框架之间迁移;UWP 或打包 WinUI 测试项目;解决方案混用 .NET 与非 .NET 测试适配器;升级 MSTest 版本。

主要能力:识别各测试项目所用框架(MSTest、NUnit、xUnit.net v2/v3);在 Directory.Build.props 集中设置 MTP 属性;启用各框架的 MTP 运行器;按 .NET SDK 版本配置 dotnet test 集成;转换 VSTest 参数(如 --logger trx 对应 --report-trx、--blame-crash 对应 --crashdump、--collect 对应 --coverage);迁移 xUnit.net v3 过滤器;更新 Azure DevOps 与 GitHub Actions 流水线;处理零测试退出码 8 等行为差异;移除仅 VSTest 需要的包并验证。

必要用法:MTP 要求测试项目设置 <OutputType>Exe</OutputType>(仅 MSTest.Sdk 自动设置)。MSTest 用 <EnableMSTestRunner>true</EnableMSTestRunner>;NUnit 需 NUnit3TestAdapter 5.0.0+ 并设 <EnableNUnitRunner>true</EnableNUnitRunner>;xUnit.net v2 引用 YTest.MTP.XUnit2 并设 OutputType;xUnit.net v3 设 <UseMicrosoftTestingPlatformRunner>true</UseMicrosoftTestingPlatformRunner>。.NET 10+ 在 global.json 加 "test": {"runner": "Microsoft.Testing.Platform"};.NET 9 及更早设 <TestingPlatformDotnetTestSupport>true</TestingPlatformDotnetTestSupport>,并用 -- 分隔构建参数与 MTP 参数,如 dotnet test --no-build -- --list-tests。

限制:xUnit.net v3 在 MTP 上不支持 VSTest 的 --filter 语法,需改用 --filter-class、--filter-method、--filter-trait 或 --filter-query;零测试时 MTP 以退出码 8 失败,可用 --ignore-exit-code 8 或环境变量 TESTINGPLATFORM_EXITCODE_IGNORE=8;Directory.Build.props 中不可用 IsTestProject 条件,应改用 MSBuildProjectName 等早期可用属性。其余细节以官方文档为准。