Partager via


Utiliser Microsoft.Testing.Platform avec dotnet test

Cet article explique comment utiliser dotnet test pour exécuter des tests lors de l’utilisation de Microsoft.Testing.Platform, ainsi que les différentes options disponibles pour configurer la sortie MSBuild générée lors de l’exécution de tests via Microsoft.Testing.Platform.

Cet article montre comment utiliser dotnet test pour exécuter tous les tests dans une solution (*.sln) qui utilise Microsoft.Testing.Platform.

Intégration dotnet test

La commande dotnet test est un moyen d’exécuter des tests à partir de solutions, de projets ou d’assemblages déjà générés. Microsoft.Testing.Platform se connecte à cette infrastructure pour fournir un moyen unifié d’exécuter des tests, en particulier lors de la migration de VSTest vers Microsoft.Testing.Platform.

Intégration dotnet test - Mode VSTest

Microsoft.Testing.Platform fournit une couche de compatibilité (VSTest Bridge) pour travailler avec dotnet test en toute transparence.

Les tests peuvent être exécutés en exécutant :

dotnet test

Cette couche exécute des tests via VSTest et s'intègre avec celui-ci au niveau de l'adaptateur de framework de test VSTest.

dotnet test – Mode Microsoft.Testing.Platform

Par défaut, dotnet test utilise le comportement VSTest pour exécuter des tests. Vous pouvez activer la prise en charge de Microsoft.Testing.Platform dans dotnet test en spécifiant le paramètre <TestingPlatformDotnetTestSupport>true</TestingPlatformDotnetTestSupport> dans votre fichier projet.

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

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

    <IsPackable>false</IsPackable>
    <IsTestProject>true</IsTestProject>

    <OutputType>Exe</OutputType>
    <EnableMSTestRunner>true</EnableMSTestRunner>

    <!-- Add this to your project file. -->
    <TestingPlatformDotnetTestSupport>true</TestingPlatformDotnetTestSupport>

  </PropertyGroup>

  <!-- ... -->

</Project>

Note

Il est vivement recommandé de définir la propriété TestingPlatformDotnetTestSupport dans Directory.Build.props. De cette façon, vous n'avez pas besoin de l'ajouter à chaque fichier de projet de test, et vous ne risquez pas d'introduire un nouveau projet qui ne définit pas cette propriété et de vous retrouver avec une solution où certains projets sont VSTest, tandis que d'autres sont Microsoft.Testing.Platform, ce qui peut ne pas fonctionner correctement et constitue un scénario non pris en charge.

Important

Malgré TestingPlatformDotnetTestSupport défini sur true, la plupart des options de ligne de commande définies dans test dotnet restent orientées VSTest et n’affectent pas les tests basés sur Microsoft.Testing.Platform. Pour fournir des arguments à Microsoft.Testing.Platform, vous devez utiliser l'une des méthodes décrites dans Arguments de ligne de commande Microsoft.Testing.Platform avec dotnet test.

La liste ci-dessous décrit toutes les options de ligne de commande dotnet test prises en charge par Microsoft.Testing.Platform:

  • -a|--arch <ARCHITECTURE>
  • --artifacts-path <ARTIFACTS_DIR>
  • -c|--configuration <CONFIGURATION>
  • -f|--framework <FRAMEWORK>
  • -e|--environment <NAME="VALUE">
  • --interactive
  • --no-build
  • --nologo
  • --no-restore
  • -o|--output <OUTPUT_DIRECTORY>
  • --os <OS>
  • -r|--runtime <RUNTIME_IDENTIFIER>
  • -v|--verbosity <LEVEL>

Ces arguments sont pris en charge, car ils sont liés à l’étape de génération et sont indépendants de la plateforme de test utilisée.

Arguments de ligne de commande Microsoft.Testing.Platform avec dotnet test

Vous pouvez fournir des arguments utilisés pour appeler l’application de test de l’une des manières suivantes :

  • À compter de Microsoft.Testing.Platform version 1.4 (incluse avec MSTest version 3.6), vous pouvez ajouter des options après le double tiret -- sur la ligne de commande :

    dotnet test -- --minimum-expected-tests 10
    
  • En utilisant la propriété MSBuild TestingPlatformCommandLineArguments sur la ligne de commande.

    dotnet test -p:TestingPlatformCommandLineArguments="--minimum-expected-tests 10"
    

    Ou dans le fichier projet :

    <PropertyGroup>
      ...
      <TestingPlatformCommandLineArguments>--minimum-expected-tests 10</TestingPlatformCommandLineArguments>
    </PropertyGroup>
    

Options MSBuild supplémentaires

L’intégration MSBuild fournit des options qui peuvent être spécifiées dans le fichier projet ou via des propriétés globales sur la ligne de commande, telles que -p:TestingPlatformShowTestsFailure=true.

Voici les options disponibles :

Afficher l’échec par test

Par défaut, les échecs de test sont résumés dans un fichier .log, et un seul échec par projet de test est signalé à MSBuild.

Pour afficher les erreurs par test ayant échoué, spécifiez -p:TestingPlatformShowTestsFailure=true sur la ligne de commande ou ajoutez la propriété <TestingPlatformShowTestsFailure>true</TestingPlatformShowTestsFailure> à votre fichier projet.

Sur la ligne de commande :

dotnet test -p:TestingPlatformShowTestsFailure=true

Ou dans le fichier projet :

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

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

    <IsPackable>false</IsPackable>
    <IsTestProject>true</IsTestProject>

    <OutputType>Exe</OutputType>
    <EnableMSTestRunner>true</EnableMSTestRunner>

    <TestingPlatformDotnetTestSupport>true</TestingPlatformDotnetTestSupport>

    <!-- Add this to your project file. -->
    <TestingPlatformShowTestsFailure>true</TestingPlatformShowTestsFailure>

  </PropertyGroup>

  <!-- ... -->

</Project>

Afficher la sortie complète de la plateforme

Par défaut, toutes les sorties de console que l’exécutable de test sous-jacent écrit sont capturées et masquées de l’utilisateur. Cela inclut la bannière, les informations de version et les informations de test mises en forme.

Pour afficher ces informations avec la sortie MSBuild, utilisez <TestingPlatformCaptureOutput>false</TestingPlatformCaptureOutput>.

Cette option n’a pas d’impact sur la façon dont l’infrastructure de test capture la sortie utilisateur écrite par Console.WriteLine ou d’autres façons similaires d’écrire dans la console.

Sur la ligne de commande :

dotnet test -p:TestingPlatformCaptureOutput=false

Ou dans le fichier projet :

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

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

    <IsPackable>false</IsPackable>
    <IsTestProject>true</IsTestProject>

    <OutputType>Exe</OutputType>
    <EnableMSTestRunner>true</EnableMSTestRunner>

    <TestingPlatformDotnetTestSupport>true</TestingPlatformDotnetTestSupport>

    <!-- Add this to your project file. -->
    <TestingPlatformCaptureOutput>false</TestingPlatformCaptureOutput>

  </PropertyGroup>

  <!-- ... -->

</Project>

Important

Tous les exemples ci-dessus ajoutent des propriétés telles que EnableMSTestRunner, TestingPlatformDotnetTestSupportet TestingPlatformCaptureOutput dans le fichier csproj. Toutefois, il est vivement recommandé de définir ces propriétés dans Directory.Build.props. De cette façon, vous n’avez pas besoin de l’ajouter à chaque fichier de projet de test, et vous ne risquez pas d’introduire un nouveau projet qui ne définit pas ces propriétés, finissant ainsi avec une solution où certains projets utilisent VSTest, tandis que d’autres utilisent Microsoft.Testing.Platform, ce qui peut entraîner un fonctionnement incorrect et constitue un scénario non pris en charge.