Microsoft.Testing.Platform 和 VSTest 比较

Microsoft.Testing.PlatformVSTest 的轻量级可移植替代项,用于在命令行、持续集成 (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.exetesthost.exedatacollector.exe。 但是,MSTest 直接嵌入到你的测试项目中,且未附带任何其他可执行文件。 你的测试项目编译成的可执行文件用于托管所有测试工具,以及执行运行测试所需的所有任务。