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
,可以引入使用 Aspire
和 MSTest
进行测试所需的所有依赖项和默认用法。
<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
,可以引入使用 Playwright
和 MSTest
进行测试所需的所有依赖项和默认用法。
<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.*
包。
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈