在.NET中,测试框架和测试平台是用于发现和运行测试的不同组件。
- 测试框架定义所针对的测试模型,例如 MSTest、NUnit、xUnit.net 或 TUnit。
- 测试平台运行测试,与 IDE 和 CLI 集成,并提供共享扩展点。
可以在两个测试平台之间进行选择:
- VSTest
- Microsoft.Testing.Platform (MTP)
小窍门
对于最简单的设置,请为存储库选择一个平台,并为该平台一致配置测试项目、CI 和工具。 不要在同一解决方案中混合基于 VSTest 和基于 MTP 的.NET测试项目或运行配置,因为不支持该方案。 如果还运行依赖于 VSTest 的非.NET测试(例如 C++ 或 JavaScript 测试),请在基于 MTP 的.NET测试的单独配置中运行这些测试。
如何选择平台
使用以下方案快速选择。
| 用例 | 选择 | 为什么 |
|---|---|---|
| 你的使用场景涉及本机 AOT 或测试执行过程中的裁剪。 | 媒体传输协议 (MTP) | MTP 支持这些新式部署方案,而 VSTest 则不支持。 |
| 你要生成打包的 WinUI 或 UWP 测试项目。 | VSTest | MTP 当前不支持这些项目类型。 |
| 你需要混合.NET测试和非.NET测试适配器(例如 JavaScript 或 C++ 适配器)。 | VSTest | VSTest 支持混合语言适配器方案,而 MTP 特定于.NET。 |
希望测试项目的行为类似于常规可执行文件(dotnet run直接运行可执行文件,dotnet watch,以及启动项目的 F5 流)。 |
媒体传输协议 (MTP) | MTP 是可执行的,因此测试应用在本地和 CI 工作流中像标准.NET应用一样运行。 |
| 你依赖于现有工具之间长期建立的集成关系。 | VSTest | VSTest 在现有产品、任务和管道中具有最长的兼容性跟踪记录。 MTP 支持在生态系统中正在增长,但某些集成可能滞后于 VSTest。 |
| 您更倾向于使用严格的默认设置和显式的行为。 | 媒体传输协议 (MTP) | MTP 倾向于确定性执行,并采用轻量级的选择性扩展模型和构建时注册。 例如,它可能会在没有测试运行时失败,减少环境依赖的可变性,并允许你在每个环境中禁用特定的扩展。 |
| 你更喜欢较宽松且具有广泛向后兼容性的默认设置。 | VSTest | 这两个平台都关心向后兼容性。 VSTest 将面向兼容性的默认值优先用于各种现有工具链,而 MTP 在其自己的扩展模型中提供向后兼容性。 |
| 当前工作流中的 VSTest 特定问题或行为会阻止你。 | 媒体传输协议 (MTP) | 在许多情况下,由于运行时模型和扩展体系结构的差异,移动到 MTP 时,同一工作流不会受到影响。 |
如果未列出特定的用例,这两个平台都是有效的选择。
集成和工具支持
| 集成区 | VSTest | 媒体传输协议 (MTP) |
|---|---|---|
| IDE 集成 | Visual Studio 和其他依赖于 VSTest 协议和适配器的工具之间的成熟集成。 | 该功能支持在 Visual Studio 和 Visual Studio Code 场景中使用,且生态系统中部分领域的集成工作仍在持续推进。 |
| CI 和外部工具 | 该功能在长期存在的 Microsoft 及第三方工具和任务中获得了广泛支持。 在Azure DevOps中,可以使用 VSTest 任务(VSTest@3、vstest.console)或.NET任务(DotNetCoreCLI@2、dotnet test)。 |
在 CI 和新式.NET工作流中工作,但某些第三方集成可能仍落后于 VSTest。 在Azure DevOps中,使用.NET任务(DotNetCoreCLI@2,dotnet test)。 |
dotnet test 行为 |
默认 VSTest 模式。 VSTest 参数和行为适用。 | 本机 MTP 模式在 .NET 10 SDK 及更高版本中可用。 |
有关 dotnet test 模式和参数的完整详细信息,请参阅使用 dotnet test 进行测试。
从测试框架开始
如果选择 VSTest
- MSTest: 使用 MSTest 运行测试
- NUnit:NUnit 和 Microsoft.Testing.Platform
- xUnit.net: xUnit.net 入门
- TUnit:VSTest 不支持。 使用 MTP。
如果选择 MTP
- MSTest: 使用 MSTest 运行测试
- NUnit: NUnit 中的 MTP 支持(NUnit 运行程序)
- xUnit.net: Microsoft测试平台(xUnit.net v3)
- TUnit: TUnit 文档
后续步骤
- 了解 MTP 概念: MTP 概述
- 了解 VSTest 选项: VSTest 选项
- 从 VSTest 迁移: 从 VSTest 迁移到 MTP
- 添加功能: MTP 功能