MSTest SDK 概述

MSTest.Sdk 是一个用于构建 MSTest 应用的 MSBuild 项目 SDK。 没有此 SDK 也可以构建 MSTest 应用,不过 MSTest SDK 应是:

  • 旨在为使用 MSTest 进行测试提供一流的体验
  • 是大多数用户的理想之选。
  • 易于为其他人配置。

MSTest SDK 使用 MSTest 运行程序发现和运行测试。

只需更新项目的 Project 节点的 Sdk 属性,即可在项目中启用 MSTest.Sdk

<Project Sdk="MSTest.Sdk/3.3.1">

    <PropertyGroup>
        <TargetFramework>net8.0</TargetFramework>
    </PropertyGroup>

    <!-- references to the code to test -->

</Project>

注意

/3.3.1 作为示例,因为它是提供 SDK 的第一个版本,但可将它替换为任何更新的版本。

为了简化版本处理,我们建议使用 global.json 在解决方案级别设置 SDK 版本。 例如,项目文件将如下所示:

<Project Sdk="MSTest.Sdk">

    <PropertyGroup>
        <TargetFramework>net8.0</TargetFramework>
    </PropertyGroup>

    <!-- references to the code to test -->

</Project>

然后,你将有一个 global.json 文件,该文件会指定 MSTest.Sdk 版本,如下所示:

{
    "msbuild-sdks": {
        "MSTest.Sdk": "3.3.1"
    }
}

有关详细信息,请参阅使用 MSBuild 项目 SDK

执行 build 来构建项目时,会使用项目设置的标准 NuGet 工作流还原并安装所有必需的组件。

无需其他任何组件即可生成和运行测试,并且可使用“经典”MSTest 项目所用的相同工具(例如 dotnet test 或 Visual Studio)。

选择运行器

默认情况下,MSTest SDK 依赖于 MSTest 运行程序,但你可通过添加 <UseVSTest>true</UseVSTest> 属性来轻松切换到 VSTest

扩展 MSTest 运行器

可以通过一组 NuGet 包扩展自定义 MSTest runner 体验。 为了简化和改进此体验,MSTest SDK 引入了两项功能。

MSTest 运行器配置文件

配置文件的概念支持你选择将应用于测试项目的默认配置和扩展集。

可以使用 TestingExtensionsProfile 属性设置配置文件,并使用下面 3 个配置文件之一:

  • Default - 启用此版本的 MSTest.SDK 建议的扩展。 如果未显式设置属性,则这是默认值。
  • None - 未启用任何扩展。
  • AllMicrosoft - 启用 Microsoft 提供的所有扩展(包括具有限制性许可证的扩展)。

下面是使用 None 配置文件的完整示例:

<Project Sdk="MSTest.Sdk/3.3.1">

    <PropertyGroup>
        <TargetFramework>net8.0</TargetFramework>
        <TestingExtensionsProfile>None</TestingExtensionsProfile>
    </PropertyGroup>

    <!-- references to the code to test -->

</Project>

启用或禁用扩展

可以使用模式 Enable[NugetPackageNameWithoutDots] 的 MSBuild 属性启用和禁用扩展。

例如,若要启用故障转储扩展(NuGet 包 Microsoft.Testing.Extensions.CrashDump),请使用以下 EnableMicrosoftTestingExtensionsCrashDump 属性,并将其设置为 true

<Project Sdk="MSTest.Sdk/3.3.1">

<PropertyGroup>
    <TargetFramework>net8.0</TargetFramework>
    <EnableMicrosoftTestingExtensionsCrashDump>true</EnableMicrosoftTestingExtensionsCrashDump>
</PropertyGroup>

<!-- references to the code to test -->

</Project>

此页面列出所有可用的扩展

警告

请查看每个扩展的许可条款,它们可能有所不同。

启用和禁用的扩展与所选扩展配置文件提供的扩展合并在一起。

这可用于在隐式 Default 配置文件的基础上启用其他扩展(如上述 CrashDumpExtension 示例所示)。

或者禁用来自所选配置文件的扩展。 在这种情况下,通过设置 <EnableMicrosoftTestingExtensionsCodeCoverage>false</EnableMicrosoftTestingExtensionsCodeCoverage> 来禁用 MS Code Coverage 扩展:

<Project Sdk="MSTest.Sdk/3.3.1">

    <PropertyGroup>
        <TargetFramework>net8.0</TargetFramework>
        <EnableMicrosoftTestingExtensionsCodeCoverage>false</EnableMicrosoftTestingExtensionsCodeCoverage>
    </PropertyGroup>

    <!-- references to the code to test -->

</Project>

功能

除了选择运行程序和特定于运行程序的扩展之外,MSTest.Sdk 还提供了其他功能来简化和增强测试体验。

.NET Aspire

.NET Aspire 是有主见的云就绪堆栈,用于生成可观察的、生产就绪的分散式应用程序。 .NET Aspire 通过处理特定云原生问题的 NuGet 包集合提供。 有关详细信息,请参阅 .NET Aspire 文档

注意

此功能从 MSTest.Sdk 3.4.0 开始提供

通过将属性 EnableAspireTesting 设置为 true,可以引入使用 AspireMSTest 进行测试所需的所有依赖项和默认用法。

<Project Sdk="MSTest.Sdk/3.4.0">

    <PropertyGroup>
        <TargetFramework>net8.0</TargetFramework>
        <EnableAspireTesting>true</EnableAspireTesting>
    </PropertyGroup>

    <!-- references to the code to test -->

</Project>

Playwright

Playwright 支持对新式 Web 应用进行可靠的端到端测试。 有关详细信息,请参阅官方 Playwright 家文档

注意

此功能从 MSTest.Sdk 3.4.0 开始提供

通过将属性 EnablePlaywright 设置为 true,可以引入使用 PlaywrightMSTest 进行测试所需的所有依赖项和默认用法。

<Project Sdk="MSTest.Sdk/3.4.0">

    <PropertyGroup>
        <TargetFramework>net8.0</TargetFramework>
        <EnablePlaywright>true</EnablePlaywright>
    </PropertyGroup>

    <!-- references to the code to test -->

</Project>

迁移到 MSTest SDK

在将现有 MSTest 测试项目迁移到 MSTest SDK 时,首先将测试项目顶部的 Sdk="Microsoft.NET.Sdk" 条目替换为 Sdk="MSTest.Sdk/3.3.1"

- Sdk="Microsoft.NET.Sdk"
+ Sdk="MSTest.Sdk"

将该版本添加到 global.json

{
    "msbuild-sdks": {
        "MSTest.Sdk": "3.3.1"
    }
}

然后,就可以开始简化项目。

删除默认属性:

- <EnableMSTestRunner>true</EnableMSTestRunner>
- <OutputType>Exe</OutputType>
- <IsPackable>false</IsPackable>
- <IsTestProject>true</IsTestProject>

删除默认包引用:

- <PackageReference Include="MSTest"
- <PackageReference Include="MSTest.TestFramework"
- <PackageReference Include="MSTest.TestAdapter"
- <PackageReference Include="MSTest.Analyzers"
- <PackageReference Include="Microsoft.NET.Test.Sdk"

最后,根据正在使用的扩展配置文件,还可以删除某些 Microsoft.Testing.Extensions.* 包。