April 30th, 2024

MSTest SDK:.NET 8的测试配置与灵活性新篇

Amy Peng
Partner Tech Advisor

本篇翻译于Marco Rossignoli 和Amaury Levé 的Introducing MSTest SDK – Improved Configuration & Flexibility

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

这种新体验是建立在最近推出的 MSTest 运行程序的基础上(请查看公告https://devblogs.microsoft.com/dotnet/introducing-ms-test-runner/,以进一步提高您的体验。 这个新的运行程序是一种轻量级、可靠且高性能的运行 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>

  <!-- Additional properties and items for your tests. -->
</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>
      <!-- Enable Microsoft.Testing.Extensions.CrashDump package on top of the default profile -->
      <EnableMicrosoftTestingExtensionsCrashDump>true</EnableMicrosoftTestingExtensionsCrashDump>
  </PropertyGroup>

  <!-- Additional properties and items for your tests. -->
</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>
    <!-- 
      Experimental MSTest Engine & source generator, 
      close sourced, licensed the same as our extensions 
      with Microsoft Testing Platform Tools license.
    -->
    <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 存储库中报告问题 

Author

Amy Peng
Partner Tech Advisor

Amy Peng is a Partner Tech Advisor on the Dev Community Team focused on .NET. Her responsibility is providing technical support on the forum and promote .NET to all the community members.

1 comment

  • 承昊 周

    据我所知,razor页几乎没人用,而很多很多朋友在用aspx页。
    很奇怪,为什么netcore要放弃很多人用的aspx转而去做个没人用的东西呢?
    razor就是个html,要实现功能需要ajax、vue、controller很多配合,要用vscode再去开发。
    对于10人左右的我们这种小团队,aspx的【onclick=后台代码】太方便了,而razor无形中增大了我们几倍的工作量。
    站在小团队、实用性的角度上,希望netcore支持aspx的方式,或者razor支持直接绑定后台代码。

    please Support ASPX page on .netcore.
    how many people are using razor-page?it is a html.
    i know very more persons are using ASPX-page. i don’t known why netcore not support aspx?
    design for using,not for designing.
    设计是为了用的,不是为了设计而设计的,更不是为了显得自己高明而设计的。