Microsoft.Testing.Platform 是 VSTest 的轻型可移植替代方法,可用于在所有上下文中运行测试,包括持续集成(CI)管道、CLI、Visual Studio 测试资源管理器和 VS Code 测试资源管理器。 Microsoft.Testing.Platform 直接嵌入到 MSTest 测试项目中,并且不存在任何其他应用依赖项(例如运行测试所需的 vstest.console 或 dotnet test)。
小窍门
如果需要在 VSTest 和 Microsoft.Testing.Platform 之间进行选择的帮助,请从 测试平台概述开始。
如果已决定使用 Microsoft.Testing.Platform,并且想要了解其模型、功能和作行为,请使用本文。
Microsoft.Testing.Platform 为开源项目。 可以在 Microsoft.Testing.Platform GitHub 存储库中找到 代码。
从这里开始
根据接下来需要的内容使用以下路径:
- 从 CLI、IDE 或 CI 运行和调试测试:运行和调试测试
- 了解 CLI 中的平台行为:使用
dotnet test进行测试 - 在一个统一位置查找平台和扩展 CLI 选项:Microsoft.Testing.Platform CLI 选项参考
- 配置框架运行程序:在 NUnit 中使用 MSTest 或 Microsoft.Testing.Platform 支持运行测试(NUnit 运行程序)
- 迁移现有的 VSTest 设置: 从 VSTest 迁移到 Microsoft.Testing.Platform
- 添加诊断、覆盖范围和报告: Microsoft.Testing.Platform 功能
- 构建自己的扩展:Microsoft.Testing.Platform 体系结构、扩展点和服务
Microsoft.Testing.Platform 支柱
这个新的测试平台基于 .NET 开发人员体验测试团队的经验构建,旨在解决自 2016 年 .NET Core 发布以来遇到的挑战。 虽然 .NET Framework 与 .NET Core/.NET 之间具有很高的兼容性,但插件系统等一些关键功能以及 .NET 编译的新可能外形规格使得开发或完全支持具有当前 VSTest 平台 体系结构的新运行时功能变得复杂。
新测试平台演变的主要驱动因素如下所述:
确定性:确保在不同的上下文(本地,CI)中运行相同的测试将产生相同的结果。 新运行时不依赖于反射或任何其他动态 .NET 运行时功能来协调测试运行。
运行时透明度:测试运行时不会干扰测试框架代码,也不会创建独立
AppDomainAssemblyLoadContext上下文,也不会使用反射或自定义程序集解析程序。扩展的编译时注册:扩展(如测试框架和进程外扩展)在编译期间注册,以确保确定性并有助于检测不一致。
零依赖项:平台的核心是单个 .NET 程序集,
Microsoft.Testing.Platform.dll该程序集没有受支持的运行时以外的依赖项。可托管:测试运行时可以托管在任何 .NET 应用程序中。 虽然控制台应用程序通常用于运行测试,但可以在任何类型的 .NET 应用程序中创建测试应用程序。 这样,就可以在特殊上下文(例如设备或浏览器)中运行测试,在这些上下文中可能存在限制。
支持所有 .NET 形态:支持当前和将来的 .NET 形态,包括原生 AOT。
高性能:在功能与扩展点之间找到合适的平衡,避免由于非基本代码导致运行时膨胀。 新的测试平台旨在“协调”测试运行,而不是提供有关如何执行此操作的实现详细信息。
可扩展:新平台基于扩展点构建,允许对运行时执行进行最大自定义。 它允许你配置测试进程主机、观察测试过程,并使用测试主机进程中测试框架中的信息。
单模块部署:可承载性功能支持单个模块部署模型,其中单个编译结果可用于支持进程外和进程内的所有扩展点,而无需交付不同的可执行模块。
受支持的测试框架
- 项目。 在 MSTest 中,
Microsoft.Testing.Platform支持是通过 MSTest 运行程序实现的。 - NUnit。 在 NUnit 中,
Microsoft.Testing.Platform支持是通过 NUnit 运行程序实现的。 - xUnit.net。 有关详细信息,请参阅 xUnit.net 文档中的Microsoft 测试平台(xUnit.net v3) 和 Microsoft测试平台(xUnit.net v2 )。
- TUnit:完全构建在
Microsoft.Testing.Platform之上,欲了解更多信息,请参阅 TUnit 文档。
支持的目标框架
Microsoft.Testing.Platform 支持 .NET(.NET 8 及更高版本)、.NET Framework(版本 4.6.2 及更高版本),并面向 NETStandard 2.0,以实现与其他运行时的最大兼容性。
运行和调试测试
有关从 CLI、Visual Studio、Visual Studio Code 和 CI 管道运行和调试 MTP 测试项目的详细指南,请参阅 “运行和调试测试”。
选项
有关平台和扩展命令行选项的完整列表,请参阅 Microsoft.Testing.Platform CLI 选项参考。
MSBuild 集成
NuGet 包 Microsoft.Testing.Platform.MSBuild 为 Microsoft.Testing.Platform 提供与 MSBuild 的各种集成:
- 支持
dotnet test。 有关详细信息,请参阅 使用 dotnet test 进行测试。 -
ProjectCapability和Visual Studio测试资源管理器需要支持Visual Studio Code。 - 自动生成入口点(
Main方法)。 - 自动生成配置文件。
- 自动检测和注册已安装的扩展包。
当此包处于活动状态(MSTest、NUnit 和 xUnit 运行程序的默认包)时,安装扩展 NuGet 包是必需的 - 扩展会自动注册,无需更改代码。 如果通过设置 <GenerateTestingPlatformEntryPoint>false</GenerateTestingPlatformEntryPoint>禁用自动生成的入口点,则必须在方法中 Main 手动注册扩展。 每个扩展页都会记录其手动注册调用。
注释
此集成以传递方式工作(如果一个项目引用了一个使用此包的项目,则该项目会表现得仿佛直接引用了此包),并且可以通过 IsTestingPlatformApplication MSBuild 属性来禁用。