Partager via


Configurer MSTest

MSTest, Microsoft Testing Framework, est une infrastructure de tests pour les applications .NET. Elle vous permet d’écrire et d’exécuter des tests et de fournir des suites de tests avec une intégration à Visual Studio et aux fonctionnalités Explorateur de test Visual Studio Code, à l’interface CLI .NET et à plusieurs pipelines d’intégration continue (CI).

MSTest est une infrastructure de tests multiplateforme, open source et totalement prise en charge qui fonctionne avec toutes les cibles .NET prises en charge (.NET Framework, .NET Core, .NET, UWP, WinUI, etc.) hébergées sur GitHub.

Runsettings

Un fichier .runsettings peut être utilisé pour configurer la façon dont les tests unitaires sont exécutés. Pour découvrir plus d’informations sur les configurations et les runsettings liés à la plateforme, vous pouvez consulter la documentation sur les runsettings VSTest ou la documentation sur les runsettings de l’exécuteur MSTest.

Élément MSTest

Les entrées des paramètres d'exécution suivantes permettent de configurer le comportement de MSTest.

Configuration Default Valeurs
AssemblyCleanupTimeout 0 Spécifiez globalement le délai d’expiration à appliquer à chaque instance de méthode de nettoyage d’assembly. L’attribut [Timeout] spécifié sur la méthode de nettoyage d’assembly remplace le délai d’expiration global.
AssemblyInitializeTimeout 0 Spécifiez globalement le délai d’expiration à appliquer à chaque instance de méthode d’initialisation d’assembly. L’attribut [Timeout] spécifié sur la méthode d’initialisation d’assembly remplace le délai d’expiration global.
AssemblyResolution false Vous pouvez spécifier des chemins d’assemblys supplémentaires pour la recherche et l’exécution des tests unitaires. Par exemple, utilisez ces chemins pour les assemblys de dépendance qui ne se trouvent pas dans le même répertoire que l’assembly de test. Pour spécifier un chemin, utilisez un élément Directory Path. Les chemins peuvent inclure des variables d’environnement.

<AssemblyResolution> <Directory path="D:\myfolder\bin\" includeSubDirectories="false"/> </AssemblyResolution>

Cette fonctionnalité est appliquée seulement lors de l’utilisation d’une cible .NET Framework.
CaptureTraceOutput true Capture des messages texte provenant des API Console.Write*, Trace.Write* et Debug.Write* qui seront associées au test en cours d’exécution.
ClassCleanupLifecycle EndOfClass Si vous souhaitez que le nettoyage de classe se produise à la fin de l’assembly, affectez la valeur EndOfAssembly. (N’est plus pris en charge à partir de MSTest v4, car EndOfClass est le seul comportement par défaut de ClassCleanup)
ClassCleanupTimeout 0 Spécifiez globalement le délai d’expiration à appliquer à chaque instance de méthode de nettoyage de classe. L’attribut [Timeout] spécifié sur la méthode de nettoyage de la classe remplace le délai d’expiration global.
ClassInitializeTimeout 0 Spécifiez globalement le délai d’expiration à appliquer à chaque instance de méthode d’initialisation de classe. L’attribut [Timeout] spécifié sur la méthode d’initialisation de la classe remplace le délai d’expiration global.
ConsiderFixturesAsSpecialTests false Pour afficher AssemblyInitialize, AssemblyCleanup, ClassInitialize, ClassCleanup en tant qu'entrées individuelles dans le journal de Visual Studio et Visual Studio Code Test Explorer et .trx, définissez cette valeur sur vrai.
DeleteDeploymentDirectoryAfterTestRunIsComplete true Pour conserver le répertoire de déploiement après une série de tests, définissez cette valeur sur false.
DeploymentEnabled true Si vous définissez cette valeur sur false, les éléments du déploiement que vous avez spécifiés dans votre méthode de test ne sont pas copiés dans le répertoire de déploiement.
DeployTestSourceDependencies true Valeur indiquant si les références de source de test doivent être déployées.
EnableBaseClassTestMethodsFromOtherAssemblies true Valeur indiquant s’il est nécessaire d’activer la découverte des méthodes de test à partir de classes de base dans un autre assembly que celui de la classe de test qui hérite.
ForcedLegacyMode false Dans les anciennes versions de Visual Studio, l’adaptateur MSTest a été optimisé afin d’être plus rapide et plus scalable. Un comportement, tel que l’ordre dans lequel les tests sont exécutés, peut ne pas être exactement identique à celui d’éditions précédentes de Visual Studio. Définissez la valeur sur true pour utiliser l’adaptateur de test le plus ancien.

Par exemple, vous pouvez utiliser ce paramètre si un fichier app.config est spécifié pour un test unitaire.

Il est recommandé d’envisager de refactoriser vos tests pour vous permettre d’utiliser le nouvel adaptateur.
MapInconclusiveToFailed false Si un test se termine avec un état Non concluant, il est mappé à l’état Ignoré dans l’Explorateur de tests. Si vous voulez que les tests non concluants s’affichent comme ayant échoué, définissez la valeur sur true.
MapNotRunnableToFailed true Valeur indiquant si un résultat non exécutable est mappé à un test non réussi.
OrderTestsByNameInClass false Si vous souhaitez exécuter des tests par noms de test à la fois dans les Explorateurs de tests et sur la ligne de commande, définissez cette valeur sur true.
Parallelize Utilisé pour définir les paramètres de parallélisation :

Workers : nombre de threads/workers à utiliser pour la parallélisation, qui correspond par défaut au nombre de processeurs de la machine actuelle.

SCOPE : étendue de la parallélisation. Vous pouvez lui affecter la valeur MethodLevel. Par défaut, ClassLevel est utilisé.

<Parallelize><Workers>32</Workers><Scope>MethodLevel</Scope></Parallelize>
SettingsFile Vous pouvez spécifier un fichier de paramètres de test à utiliser avec l’adaptateur MSTest ici. Vous pouvez également spécifier un fichier de paramètres de test à partir du menu de paramètres.

Si vous spécifiez cette valeur, vous devez également affecter à ForcedLegacyMode la valeur true.

<ForcedLegacyMode>true</ForcedLegacyMode>
TestCleanupTimeout 0 Spécifiez globalement le délai d’expiration à appliquer à chaque instance de méthode de nettoyage de test. L’attribut [Timeout] spécifié sur la méthode de nettoyage de test remplace le délai d’expiration global.
TestInitializeTimeout 0 Spécifiez globalement le délai d’expiration à appliquer à chaque instance de méthode d’initialisation de test. L’attribut [Timeout] spécifié sur la méthode d’initialisation de test remplace le délai d’expiration global.
TestTimeout 0 Obtient le délai d’expiration du cas de test global spécifié.
TreatClassAndAssemblyCleanupWarningsAsErrors false Pour voir vos échecs des nettoyages de classe sous forme d’erreurs, affectez à cette valeur la valeur true.
TreatDiscoveryWarningsAsErrors false Pour signaler des avertissements de découverte de tests en tant qu’erreurs, définissez cette valeur sur true.

TestRunParameter, élément

<TestRunParameters>
    <Parameter name="webAppUrl" value="http://localhost" />
</TestRunParameters>

Les paramètres de série de tests fournissent un moyen de définir des variables et des valeurs qui sont disponibles pour les tests au moment de l’exécution. Accédez aux paramètres en utilisant la propriété TestContext.Properties MSTest :

private string _appUrl;
public TestContext TestContext { get; set; }

[TestMethod]
public void HomePageTest()
{
    string _appUrl = TestContext.Properties["webAppUrl"];
}

Pour utiliser des paramètres d’exécution de test, ajoutez une propriété de publique TestContext à votre classe de test.

Exemple de fichier .runsettings

Le code XML suivant illustre le contenu d’un fichier .runsettings type. Copiez ce code et modifiez-le selon vos besoins.

Chaque élément du fichier est facultatif, car il a une valeur par défaut.

<?xml version="1.0" encoding="utf-8"?>
<RunSettings>

  <!-- Parameters used by tests at run time -->
  <TestRunParameters>
    <Parameter name="webAppUrl" value="http://localhost" />
    <Parameter name="webAppUserName" value="Admin" />
    <Parameter name="webAppPassword" value="Password" />
  </TestRunParameters>

  <!-- MSTest -->
  <MSTest>
    <MapInconclusiveToFailed>True</MapInconclusiveToFailed>
    <CaptureTraceOutput>false</CaptureTraceOutput>
    <DeleteDeploymentDirectoryAfterTestRunIsComplete>False</DeleteDeploymentDirectoryAfterTestRunIsComplete>
    <DeploymentEnabled>False</DeploymentEnabled>
    <ConsiderFixturesAsSpecialTests>False</ConsiderFixturesAsSpecialTests>
    <AssemblyResolution>
      <Directory path="D:\myfolder\bin\" includeSubDirectories="false"/>
    </AssemblyResolution>
  </MSTest>

</RunSettings>

testconfig.json

Lorsque vous exécutez vos tests avec MSTest, vous pouvez utiliser un fichier testconfig.json pour configurer le comportement de l’exécuteur de test. Le fichier testconfig.json est un fichier JSON qui contient les paramètres de configuration de l’exécuteur de test. Le fichier est utilisé pour configurer l’exécuteur de test et l’environnement d’exécution de test. Pour plus d’informations, consultez la documentation Microsoft.Testing.Platform testconfig.json.

À compter de MSTest 3.7, vous pouvez également configurer des exécutions MSTest dans le même fichier de configuration. Les sections suivantes décrivent les paramètres que vous pouvez utiliser dans le fichier testconfig.json.

Élément MSTest

Les paramètres MSTest sont regroupés par fonctionnalité décrites dans les sections suivantes.

Entrée Default Description
ordonnerTestsParNomDansClasse false Si vous souhaitez exécuter des tests par noms de test à la fois dans les Explorateurs de tests et sur la ligne de commande, définissez cette valeur sur true.
enableBaseClassTestMethodsFromOtherAssemblies true Valeur indiquant s’il est nécessaire d’activer la découverte des méthodes de test à partir de classes de base dans un autre assembly que celui de la classe de test qui hérite.
classCleanupLifecycle EndOfAssembly Si vous souhaitez que le nettoyage de la classe se produise à la fin de la classe, définissez-le sur EndOfClass.

Paramètres AssemblyResolution

Entrée Default Description
Chemins Aucun Vous pouvez spécifier des chemins d’assemblys supplémentaires pour la recherche et l’exécution des tests unitaires. Par exemple, utilisez ces chemins pour les assemblys de dépendance qui ne se trouvent pas dans le même répertoire que l’assembly de test. Vous pouvez spécifier un chemin d’accès dans la forme { "path": "...", "includeSubDirectories": "true/false" }.

Paramètres de déploiement

Entrée Default Description
supprimerLeRépertoireDeDéploiementAprèsLaFinDuTest true Pour conserver le répertoire de déploiement après une série de tests, définissez cette valeur sur false.
deployTestSourceDependencies true Indique si les références de source de test doivent être déployées.
enabled true Si vous définissez cette valeur sur false, les éléments du déploiement que vous avez spécifiés dans votre méthode de test ne sont pas copiés dans le répertoire de déploiement.

Paramètres de sortie

Entrée Default Description
captureTrace false Capture des messages texte provenant des API Console.Write*, Trace.Write* et Debug.Write* qui seront associées au test en cours d’exécution.

Paramètres de parallélisme

Entrée Default Description
enabled false Activez la parallélisation des tests.
portée classe Étendue de la parallélisation. Vous pouvez le définir sur method. La valeur par défaut, class, correspond à l’exécution de tous les tests d’une classe donnée séquentiellement, mais plusieurs classes en parallèle.
travailleur 0 Nombre de threads/workers à utiliser pour la parallélisation. La valeur par défaut correspond au nombre de processeurs sur l’ordinateur actuel.

Paramètres d’exécution

Entrée Default Description
considerEmptyDataSourceAsInconclusive false Lorsqu’elle est définie sur true, une source de données vide est considérée comme inconclusive.
considérerLesFixturesCommeDesTestsSpéciaux false Pour afficher AssemblyInitialize, AssemblyCleanup, ClassInitialize, ClassCleanup en tant qu'entrées individuelles dans le journal de Visual Studio et Visual Studio Code Test Explorer et .trx, définissez cette valeur sur vrai.
mapInconclusiveToFailed false Si un test se termine avec un état Non concluant, il est mappé à l’état Ignoré dans l’Explorateur de tests. Si vous voulez que les tests non concluants s’affichent comme ayant échoué, définissez la valeur sur true.
mapNotRunnableToFailed true Valeur indiquant si un résultat non exécutable est mappé à un test non réussi.
treatClassAndAssemblyCleanupWarningsAsErrors false Pour voir vos échecs des nettoyages de classe sous forme d’erreurs, affectez à cette valeur la valeur true.
TraitementDesAvertissementsDeDécouverteCommeErreurs false Pour signaler des avertissements de découverte de tests en tant qu’erreurs, définissez cette valeur sur true.

Paramètres de délai d’expiration

Entrée Default Description
assemblyCleanup 0 Spécifiez globalement le délai d’expiration à appliquer à chaque instance de méthode de nettoyage d’assembly.
assemblyInitialize 0 Spécifiez globalement le délai d’expiration à appliquer à chaque instance de méthode d’initialisation d’assembly.
classCleanup 0 Spécifiez globalement le délai d’expiration à appliquer à chaque instance de méthode de nettoyage de classe.
classInitialize 0 Spécifiez globalement le délai d’expiration à appliquer à chaque instance de méthode d’initialisation de classe.
test 0 Spécifiez globalement le délai d’expiration du test.
testCleanup 0 Spécifiez globalement le délai d’expiration à appliquer à chaque instance de méthode de nettoyage de test.
testInitialize 0 Spécifiez globalement le délai d’expiration à appliquer à chaque instance de méthode d’initialisation de test.
useCooperativeCancellation false Lorsqu’il est réglé sur true, en cas de délai d’attente, MSTest déclenche uniquement l’annulation du CancellationToken, mais continue de respecter la méthode. Ce comportement est plus performant, mais s’appuie sur l’utilisateur pour transmettre correctement le jeton via tous les chemins d’accès.

Remarque

L'attribut [Timeout] spécifié sur une méthode remplace le délai d’expiration global. Par exemple, [Timeout(1000)] sur une méthode marquée avec [AssemblyCleanup] remplace le délai d’expiration global assemblyCleanup.

Exemple de fichier testconfig.json

Le code JSON suivant montre le contenu d’un fichier .testconfig.json standard. Copiez ce code et modifiez-le selon vos besoins.

Chaque élément du fichier est facultatif, car il a une valeur par défaut.

{
  "platformOptions": {
  },
  "mstest": {
    "execution": {
        "mapInconclusiveToFailed" : true,
        "disableAppDomain": true,
        "considerFixturesAsSpecialTests" : false,
    },
    "parallelism" : {
        "enabled": true,
        "scope": "method",
    },
    "output": {
        "captureTrace": false
    }
  }
}