MSTest SDK 配置

本文介绍 MSTest.Sdk 的高级配置选项。 有关基本设置和入门,请参阅 MSTest 入门

重要

默认情况下,MSTest.Sdk 将 MSTest 运行程序与 Microsoft.Testing.Platform 配合使用,包括 dotnet 测试。 这需要修改 CI 和本地 CLI 调用,还会影响 .runsettings 的可用条目。 可以通过 切换到 VSTest 来保留旧的集成和工具。

MSTest.Sdk 默认将 EnableMSTestRunnerTestingPlatformDotnetTestSupport 设置为 true。 有关 dotnet 测试及其不同模式的详细信息,请参阅 使用 dotnet 测试进行测试

测试实用工具帮助程序库

如果使用 MSTest.Sdk 的项目旨在成为测试实用工具帮助程序库,并且本身不包含任何可运行的测试,则项目应具有 <IsTestApplication>false</IsTestApplication>

选择跑步者

默认情况下,MSTest SDK 依赖于 Microsoft.Testing.Platform,但可以通过添加属性 切换到 <UseVSTest>true</UseVSTest>

扩展 Microsoft.Testing.Platform

可以通过一组 Microsoft.Testing.Platform自定义 体验。 为了简化和改进此体验,MSTest SDK 引入了两项功能:

Microsoft.Testing.Platform 配置文件

配置模板的概念允许你选择将应用于你的测试项目的默认配置和扩展集。

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

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

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

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

</Project>
扩展/配置文件 没有 违约 AllMicrosoft
代码覆盖率 ✔️ ✔️
故障转储 ✔️
假货 ✔️¹
挂起转储 ✔️
热重载 ✔️
重试 ✔️
Trx ✔️ ✔️
AzureDevOpsReport ✔️²

¹ MSTest.Sdk 3.7.0+ ¹ MSTest.Sdk 3.11.0+

启用或禁用扩展

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

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

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

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

</Project>

有关所有可用扩展的列表,请参阅 Microsoft.Testing.Platform 扩展

警告

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

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

此属性模式可用于在隐式 Default 配置文件之上启用其他扩展(如前面的 CrashDumpExtension 示例所示)。

您还可以禁用所选配置文件的扩展。 例如,通过设置 MS Code Coverage 禁用 <EnableMicrosoftTestingExtensionsCodeCoverage>false</EnableMicrosoftTestingExtensionsCodeCoverage> 扩展:

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

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

</Project>

功能

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

使用 Aspire 进行测试

Aspire 是一个有明确意见的、云端友好的堆栈,用于构建可观察的、已准备生产的分布式应用程序。 Aspire 通过处理特定云原生问题的 NuGet 包集合提供。 有关详细信息,请参阅 Aspire 文档

注意

此功能可从 MSTest.Sdk 3.4.0 获取。

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

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

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

</Project>

使用 Playwright 进行测试

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

注意

此功能可从 MSTest.Sdk 3.4.0 获取。

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

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

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

</Project>

迁移到 MSTest SDK

请考虑迁移到 MSTest SDK 所需的以下步骤。

更新项目

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

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

将该版本添加到 global.json

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

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

删除默认属性:

- <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.* 包。

更新 CI

更新项目后,如果您正在使用 Microsoft.Testing.Platform(默认值)并且依赖 dotnet test 运行测试,则必须更新 CI 配置。 有关详细信息以及指导您了解所有必需的更改的信息,请参阅 dotnet 测试集成

当您在使用 dotnet test 的 VSTest 模式时,以下是在 Azure DevOps 中执行 DotNetCoreCLI 任务的更新示例:

\- task: DotNetCoreCLI@2
  inputs:
    command: 'test'
    projects: '**/**.sln'
-    arguments: '--configuration Release'
+    arguments: '--configuration Release -- --report-trx --results-directory $(Agent.TempDirectory) --coverage'

已知限制

NuGet 提供的 MSBuild SDK(包括 MSTest.Sdk)在更新其版本方面具有 有限的工具支持 ,这意味着用于管理 NuGet 包的常规 NuGet 更新和 Visual Studio UI 无法按预期工作。 需要在 global.json 文件和项目文件中手动更新版本。 即使您由于问题 dependabot-core#12824dependabot-core#8615 使用了 Dependabot,这一点也同样适用。

另请参阅