通过


Microsoft.Testing.Platform 概述

Microsoft.Testing.Platform 是 VSTest 的轻型可移植替代方法,可用于在所有上下文中运行测试,包括持续集成(CI)管道、CLI、Visual Studio 测试资源管理器和 VS Code 测试资源管理器。 Microsoft.Testing.Platform 直接嵌入到 MSTest 测试项目中,并且不存在任何其他应用依赖项(例如运行测试所需的 vstest.consoledotnet test)。

小窍门

如果需要在 VSTest 和 Microsoft.Testing.Platform 之间进行选择的帮助,请从 测试平台概述开始。

如果已决定使用 Microsoft.Testing.Platform,并且想要了解其模型、功能和作行为,请使用本文。

Microsoft.Testing.Platform 为开源项目。 可以在 Microsoft.Testing.Platform GitHub 存储库中找到 代码。

从这里开始

根据接下来需要的内容使用以下路径:

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。

  • 高性能:在功能与扩展点之间找到合适的平衡,避免由于非基本代码导致运行时膨胀。 新的测试平台旨在“协调”测试运行,而不是提供有关如何执行此操作的实现详细信息。

  • 可扩展:新平台基于扩展点构建,允许对运行时执行进行最大自定义。 它允许你配置测试进程主机、观察测试过程,并使用测试主机进程中测试框架中的信息。

  • 单模块部署:可承载性功能支持单个模块部署模型,其中单个编译结果可用于支持进程外和进程内的所有扩展点,而无需交付不同的可执行模块。

受支持的测试框架

支持的目标框架

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.MSBuildMicrosoft.Testing.Platform 提供与 MSBuild 的各种集成:

  • 支持 dotnet test。 有关详细信息,请参阅 使用 dotnet test 进行测试
  • ProjectCapabilityVisual Studio 测试资源管理器需要支持 Visual Studio Code
  • 自动生成入口点(Main 方法)。
  • 自动生成配置文件。
  • 自动检测和注册已安装的扩展包。

当此包处于活动状态(MSTest、NUnit 和 xUnit 运行程序的默认包)时,安装扩展 NuGet 包是必需的 - 扩展会自动注册,无需更改代码。 如果通过设置 <GenerateTestingPlatformEntryPoint>false</GenerateTestingPlatformEntryPoint>禁用自动生成的入口点,则必须在方法中 Main 手动注册扩展。 每个扩展页都会记录其手动注册调用。

注释

此集成以传递方式工作(如果一个项目引用了一个使用此包的项目,则该项目会表现得仿佛直接引用了此包),并且可以通过 IsTestingPlatformApplication MSBuild 属性来禁用。

另请参阅