技术速递|MSTest SDK 简介 – 改进的配置和灵活性

作者:Marco Rossignoli & Amaury Levé
排版:Alan Wang

我们很高兴地宣布,基于 MSBuild Project SDK 系统构建的全新 MSTest SDK已推出。它旨在通过合理的默认值和灵活的选项使项目配置更加容易,从而为您提供更好的 MSTest 测试体验。

这种新体验是建立在最近推出的 MSTest 运行程序的基础上(请查看公告),以进一步提高您的体验。这个新的运行程序是一种轻量级、可靠且高性能的运行 MSTest 测试的方式,作为 MSTest.TestAdapter NuGet 包的依赖项发布。该运行器及其扩展由多个 NuGet 包组成,以提供可扩展、灵活且可配置的测试运行体验。然而,可定制性可能会导致许多问题:推荐的扩展是什么?正确的默认值是什么?如何对齐版本?这就是 MSTest SDK 的用武之地。

MSTest SDK 入门

开始使用新的 MSTest SDK 非常简单。只需创建一个 MSTest 项目(或更新现有的 MSTest 项目)并将 .csproj 文件的内容替换为以下内容:

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

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

  <!-- 用于测试的其他属性和项目。-->
</Project>

请注意,您可以使用 MSTest 支持的任何目标框架(即 net462 及更高版本)。

MSTest SDK 的优点

这个新的 SDK 为您和您的测试项目提供了许多优势,例如:

  • 更好的默认值
  • 简化使用
  • MSTest 运行程序的可扩展性
  • 更容易选择加入新功能(例如本机 AOT 测试)

更好的默认值

使用 MSTest SDK 时,您将与主要类型的应用程序(例如 ASP.NET Core、Razor、Windows 桌面)提供的模式保持一致。它将使用 MSTest 团队为您的测试项目提供的默认建议。

例如,我们在 v3.2 中引入了一些 MSTest 静态代码分析器,但这些分析器是在新软件包中定义的,默认情况下不可用,因此您必须手动将此包添加到测试项目中。相反,通过使用 MSTest SDK,您只需更改版本即可获得所有新的默认值。

我们想要指出的是,在选择默认值并在版本之间更新它们时,我们会严格遵循语义版本控制原则(请参阅有关语义版本控制的文章),以便保证您可以理解且轻松的更新。

更轻松地使用 MSTest Runner 扩展

除了 MSTest 运行程序之外,我们还提供了一组扩展,您可以将它们安装为 NuGet 包以提升您的测试体验。为了帮助您选择正确的默认值、正确的扩展,并确保扩展之间能够轻松更新和调整,我们引入了“配置文件”的新概念。我们目前提供以下 3 个配置文件:Default、AllMicrosoft 和 None,您可以配置和进一步自定义。我们推荐使用默认配置文件。

默认配置文件包含:

从任何配置文件开始,您可以通过向项目添加一些额外属性来手动选择加入或去除任何附加扩展,这些属性将遵循规则 Enable[NugetPackageNameWithoutDots]。例如,要向默认配置文件添加故障转储支持,您只需添加以下 MSBuild 属性 EnableMicrosoftTestingExtensionsCrashDump 并将其设置为 true。

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

  <PropertyGroup>
      <TargetFramework>net8.0</TargetFramework>
      <!-- 在默认配置文件之上启用 Microsoft.Testing.Extensions.CrashDump 包 -->
      <EnableMicrosoftTestingExtensionsCrashDump>true</EnableMicrosoftTestingExtensionsCrashDump>
  </PropertyGroup>

  <!-- 用于测试的其他属性和项目。-->
</Project>

您可以参考我们的 MSTest SDK 文档以获取有关这些配置文件及其默认值的更多信息。

测试 Native AOT

MSTest 是第一个支持在 Native AOT 模式下运行测试的 .NET 测试框架和运行器。使用 MSTest SDK 时,我们将自动检测您是否要发布到 AOT,并透明地交换所有必需的测试包和配置以匹配此专用模式。

有关使用 Native AOT 进行测试的更多信息,请参阅此博文:使用 Native AOT 进行测试。

不使用 MSTest SDK 的项目设置示例:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>net8.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>

    <OutputType>exe</OutputType>
    <PublishAot>true</PublishAot>
  </PropertyGroup>

  <ItemGroup>
    <!-- 
      实验性 MSTest 引擎和源代码生成器,闭源,与我们的扩展具有相同的 Microsoft 测试平台工具许可证。
    -->
    <PackageReference Include="MSTest.Engine" Version="1.0.0-alpha.24163.4" />
    <PackageReference Include="MSTest.SourceGeneration" Version="1.0.0-alpha.24163.4" />

    <PackageReference Include="Microsoft.CodeCoverage.MSBuild" Version="17.10.4" />
    <PackageReference Include="Microsoft.Testing.Extensions.CodeCoverage" Version="17.10.4" />

    <PackageReference Include="Microsoft.Testing.Extensions.TrxReport" Version="1.0.2" />
    <PackageReference Include="Microsoft.Testing.Platform.MSBuild" Version="1.0.2" />
    <PackageReference Include="MSTest.TestFramework" Version="3.2.2" />
    <PackageReference Include="MSTest.Analyzers" Version="3.2.2" />
  </ItemGroup>

  <ItemGroup>
    <ProjectReference Include="..\ClassLibrary1\ClassLibrary1.csproj" />
  </ItemGroup>

  <ItemGroup>
    <Using Include="Microsoft.VisualStudio.TestTools.UnitTesting" />
  </ItemGroup>

</Project>

使用 MSTest SDK 进行相同的项目设置:

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

  <PropertyGroup>
    <TargetFramework>net8.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
    <PublishAot>true</PublishAot>
  </PropertyGroup>

  <ItemGroup>
    <ProjectReference Include="..\ClassLibrary1\ClassLibrary1.csproj" />
  </ItemGroup>

  <ItemGroup>
    <Using Include="Microsoft.VisualStudio.TestTools.UnitTesting" />
  </ItemGroup>

</Project>

下一步计划?

虽然 MSTest SDK 风格仍在开发中,但它已经成为我们即将推出的演变和功能的基石。我们强烈建议所有 MSTest 用户过渡到此 SDK 样式,该样式将成为我们使用 .NET 9 的 MSTest 项目模板的标准。

我们还计划在即将发布的版本中添加更多场景,例如 Playwright 和 WinUI。

我们欢迎任何关于如何进一步改进和完善它的反馈,以确保它符合用户的不同需求和期望。分享反馈的最佳方式是在我们的 microsoft/testfx 存储库中报告问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值