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
, TestingPlatformDotnetTestSupport
et 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.