Microsoft.Testing.Platform 是运行测试的轻量且可移植的替代方案,可用于命令行、持续集成(CI)管道、Visual Studio 测试资源管理器和 Visual Studio Code 中,以替代 VSTest。 本文介绍 Microsoft.Testing.Platform 和 VSTest 之间的主要区别。
测试执行的差异
根据运行器的不同,测试以不同的方式执行。
执行 VSTest 测试
VSTest 附带 Visual Studio、.NET SDK,并作为 Microsoft.TestPlatform NuGet 包中的独立工具提供。 VSTest 使用一个名为 vstest.console.exe的测试运行程序来运行测试,该程序可以直接使用或通过 dotnet test使用。
执行 Microsoft.Testing.Platform 测试
Microsoft.Testing.Platform 直接嵌入到测试项目中,不会提供任何额外的可执行文件。 运行你的项目可执行文件时,你的测试将运行。 有关运行 Microsoft.Testing.Platform 测试的详细信息,请参阅 Microsoft.Testing.Platform 概述:运行和调试测试。
命名空间和 NuGet 包
为了熟悉 Microsoft.Testing.Platform 和 VSTest,了解这两个工具使用的命名空间和 NuGet 包非常有帮助。
VSTest 命名空间
VSTest 是一组测试工具,也称为 测试平台。 VSTest 源代码是开源的,可在 microsoft/vstest GitHub 存储库中使用。 该代码使用 Microsoft.TestPlatform.* 命名空间。
VSTest 可扩展,常见类型放置在 Microsoft.TestPlatform.ObjectModel NuGet 包中。
Microsoft.Testing.Platform 命名空间
Microsoft.Testing.Platform 基于 命名空间中的 Microsoft.Testing.* NuGet 包和其他库。 与 VSTest 一样,Microsoft.Testing.Platform 是开源的,并且具有 microsoft/testfx GitHub 存储库。
通信协议
注意
Visual Studio 测试资源管理器支持自 17.12 起的 Microsoft.Testing.Platform 协议。 如果使用早期版本的 Visual Studio 运行/调试测试,测试资源管理器将使用 vstest.console.exe 和旧协议来运行这些测试。
Microsoft.Testing.Platform 使用基于 JSON-RPC 的协议在 Visual Studio 与测试运行程序进程之间进行通信。 协议记录在 MSTest GitHub 存储库。
VSTest 还使用基于 JSON 的通信协议,但不是基于 JSON-RPC 的。
禁用新协议
若要在测试资源管理器中禁用新协议的使用,可以编辑项目以添加以下属性:<DisableTestingPlatformServerCapability>true</DisableTestingPlatformServerCapability>。
还可以转到 Visual Studio 中的“预览功能”选项,然后取消选择“使用测试平台服务器模式”选项。
可执行文件
VSTest 提供多个可执行文件,尤其是 vstest.console.exe、testhost.exe和 datacollector.exe。 但是,Microsoft.Testing.Platform 直接嵌入到测试项目中,不会交付任何其他可执行文件。 测试项目编译到的可执行文件用于托管所有测试工具并执行运行测试所需的所有任务。