Microsoft présente MSTest SDK avec des améliorations de la configuration et de la flexibilité, offrant de meilleures valeurs par défaut, une utilisation simplifiée et une prise en charge du mode AOT natif.

Microsoft annonce le nouveau MSTest SDK construit sur le système MSBuild Project SDK. Il est conçu pour donner une meilleure expérience de test avec MSTest en facilitant la configuration du projet grâce à des valeurs par défaut raisonnables et des options flexibles.

Cette nouvelle expérience a été construite sur le programme d'exécution MSTest récemment introduit pour simplifier encore plus votre expérience. Ce nouveau programme d'exécution, un moyen léger, fiable et performant d'exécuter les tests MSTest, est livré en tant que dépendance du package NuGet MSTest.TestAdapter. Le programme d'exécution et ses extensions sont constitués de plusieurs packages NuGet afin de fournir une expérience d'exécution des tests extensible, flexible et configurable. Cependant, le fait d'être personnalisable peut susciter de nombreuses questions : Quelles sont les extensions recommandées ? Quelles sont les valeurs par défaut correctes ? Comment aligner les versions ? C'est là que le SDK MSTest entre en jeu.

Commencer avec le SDK MSTest

Il est facile de commencer à utiliser le nouveau SDK MSTest. Il suffit de créer un projet MSTest (ou de mettre à jour un projet MSTest existant) et de remplacer le contenu du fichier .csproj par ce qui suit :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
<Project Sdk="MSTest.Sdk/3.3.1">
 
  <PropertyGroup> 
      <TargetFramework>net8.0</TargetFramework>
  </PropertyGroup>
 
  <!-- Additional properties and items for your tests. -->
</Project>
Notez que vous pouvez utiliser n'importe quel cadre cible pris en charge par MSTest (c'est-à-dire net462 et plus).



Avantages du SDK MSTest

Ce nouveau SDK offre de nombreux avantages pour vous et vos projets de test :

  • Meilleures valeurs par défaut
  • Utilisation simplifiée
  • Extensibilité du programme d'exécution MSTest
  • Une acceptation plus facile des nouvelles fonctionnalités (par exemple, les tests AOT natifs).

Meilleures valeurs par défaut

Lorsque vous utilisez le SDK MSTest, vous vous alignez sur les modèles fournis par les principaux types d'applications tels que ASP.NET Core, Razor, Windows Desktop. Il utilisera les suggestions par défaut que l'équipe MSTest fait pour vos projets de test.

Par exemple, Microsoft a introduit certains analyseurs de code statique MSTest avec la v3.2, mais ces analyseurs sont définis dans un nouveau package qui n'est pas disponible par défaut, de sorte que vous devrez ajouter manuellement ce package à vos projets de test. Au lieu de cela, en utilisant MSTest SDK, vous pouvez simplement changer de version et obtenir toutes les nouvelles valeurs par défaut.

Microsoft suit de près les principes de versionnement sémantique lors du choix des valeurs par défaut et de leur mise à jour entre les versions, afin de vous garantir des mises à jour compréhensibles et faciles.

Utilisation plus facile des extensions de MSTest Runner

En plus du programme d'exécution MSTest, Microsoft livre également un ensemble d'extensions que vous pouvez installer en tant que packages NuGet pour améliorer votre expérience de test. Pour vous aider à sélectionner les bonnes valeurs par défaut, les bonnes extensions et pour vous assurer que vous avez une mise à jour facile et des alignements entre les extensions, nous introduisons un nouveau concept de "profils". Microsoft propose actuellement les 3 profils suivants : Default, AllMicrosoft et None, que vous pouvez configurer et personnaliser. Le profil par défaut est recommandé.

Le profil par défaut contient

  • Couverture du code Microsoft
  • Prise en charge des rapports TRX

À partir de n'importe quel profil, vous pouvez ensuite choisir manuellement d'intégrer ou de supprimer toute extension supplémentaire en ajoutant des propriétés supplémentaires à votre projet qui suivraient le modèle Enable[NugetPackageNameWithoutDots]. Par exemple, pour ajouter la prise en charge du crash dump au profil par défaut, vous pouvez simplement ajouter la propriété MSBuild suivante EnableMicrosoftTestingExtensionsCrashDump à true.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
<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>
Vous pouvez vous référer au documentation MSTest SDK pour obtenir plus d'informations sur ces profils et leurs valeurs par défaut.

Tester l'AOT natif

MSTest est le premier Framework de test et exécuteur .NET à prendre en charge l'exécution de tests en mode Native AOT. Lorsque vous utilisez le SDK MSTest, Microsoft détecte automatiquement si vous publiez en mode AOT et permute de manière transparente tous les paquets et configurations de test requis pour correspondre à ce mode spécialisé.

Exemple de configuration de projet sans MSTest SDK :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<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>
La même configuration de projet avec MSTest SDK :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<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>

La prochaine étape ?

Le style du SDK MSTest, bien que toujours en cours de développement, est la pierre angulaire des prochaines évolutions et fonctionnalités. Microsoft encourage fortement tous les utilisateurs de MSTest à passer à ce style SDK qui deviendra la standard pour le modèle de projet MSTest avec .NET 9.

Microsoft prévoit également d'ajouter d'autres scénarios dans les prochaines versions telles que Playwright et WinUI.

Source : "Introducing MSTest SDK" (Microsoft)

Et vous ?

Quel est votre avis sur le sujet ?

Voir aussi :

Microsoft partage sa vision initiale de .NET 9 et publie le premier aperçu de la nouvelle version du framework dont les domaines d'intérêt sont le développement d'apps cloud-natives et intelligentes

Qu'est-ce que .NET, et pourquoi le choisir ? par Microsoft .NET team