Microsoft.Testing.Platform 和 VSTest 比较
Microsoft.Testing.Platform
是 VSTest 的轻量级可移植替代项,用于在命令行、持续集成 (CI) 管道、Visual Studio 测试资源管理器和 Visual Studio Code 中运行测试。 本文介绍了 MSTest 运行器与 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.Platform NuGet 包和 Microsoft.Testing.*
命名空间中的其他库。 与 VSTest 类似,Microsoft.Testing.Platform
也是开源的,并且具有 microsoft/testfx GitHub 存储库。
通信协议(预览版)
注意
Visual Studio 测试资源管理器在 17.10 及更高版本的预览版中支持 Microsoft.Testing.Platform 协议。 如果你使用早期版本的 Visual Studio 运行/调试你的测试,则测试资源管理器将使用 vstest.console.exe
和旧协议来运行这些测试。
Microsoft.Testing.Platform 使用基于 JSON-RPC 的协议在 Visual Studio 与测试运行程序进程之间进行通信。 该协议记录在 MSTest GitHub 存储库中。
VSTest 也使用基于 JSON 的通信协议,但它不基于 JSON-RPC。
禁用新协议
若要在测试资源管理器中禁用新协议,可以编辑 csproj 并移除 TestingPlatformServer
功能。
<ItemGroup>
<ProjectCapability Remove="TestingPlatformServer" />
</ItemGroup>
可执行文件
VSTest 附带了多个可执行文件,比较重要的有 vstest.console.exe
、testhost.exe
和 datacollector.exe
。 但是,MSTest 直接嵌入到你的测试项目中,且未附带任何其他可执行文件。 你的测试项目编译成的可执行文件用于托管所有测试工具,以及执行运行测试所需的所有任务。