Remarque
L’accès à cette page requiert une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page requiert une autorisation. Vous pouvez essayer de modifier des répertoires.
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.
Paramètres d'exécution
Un fichier .runsettings peut être utilisé pour configurer la façon dont les tests unitaires sont exécutés. Pour en savoir plus sur les runsettings et les configurations 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.
| Paramétrage | Par défaut | Valeurs |
|---|---|---|
AssemblyCleanupTimeout |
Aucun | Définissez de manière globale le délai d'expiration à appliquer à chaque instance de méthode de nettoyage d'assemblage.
[Timeout] l’attribut spécifié sur la méthode de nettoyage d’assembly remplace le délai d’expiration global. |
AssemblyInitializeTimeout |
Aucun | Spécifiez globalement le délai d’expiration à appliquer à chaque instance de méthode d’initialisation d’assembly.
[Timeout] l’attribut spécifié dans la méthode d’initialisation de l’assembly remplace le délai d’expiration global. |
AssemblyResolution |
faux | 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 |
Result |
Capturez du texte à partir des Console.Write*Trace.Write*API et Debug.Write* des API et associez-le au test actuel. À compter de MSTest 4.4, utilisez None, Resultou Live.
Live fait également écho Console, Traceet TestContext.Write* génère une sortie à la console pendant l’exécution du test. Les valeurs booléennes antérieures restent prises en charge : true mappées à Result, et false mappées à None. |
ClassCleanupLifecycle |
EndOfClass | Si vous souhaitez que le nettoyage de classe se produise à la fin de l’assembly, configurez-le sur EndOfAssembly. (N’est plus pris en charge à partir de MSTest v4, car EndOfClass est le comportement ClassCleanup par défaut et le seul pris en charge) |
ClassCleanupTimeout |
Aucun | 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 |
Aucun | 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 |
faux | 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 |
vrai | Pour conserver le répertoire de déploiement après une série de tests, définissez cette valeur sur false. |
DeploymentEnabled |
vrai | 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 |
vrai | Valeur indiquant si les références de source de test doivent être déployées. |
EnableBaseClassTestMethodsFromOtherAssemblies |
vrai | 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 |
faux | 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. |
GlobalTestCleanupTimeout |
TestCleanupTimeout |
À compter de MSTest 4.4, spécifiez le délai d’expiration de chaque méthode de nettoyage de test globale. Lorsque vous omettez cette entrée, MSTest utilise TestCleanupTimeout. Un [Timeout] attribut de la méthode remplace les deux valeurs. |
GlobalTestInitializeTimeout |
TestInitializeTimeout |
À compter de MSTest 4.4, spécifiez le délai d’expiration pour chaque méthode d’initialisation de test global. Lorsque vous omettez cette entrée, MSTest utilise TestInitializeTimeout. Un [Timeout] attribut de la méthode remplace les deux valeurs. |
LaunchDebuggerOnTestFailure |
faux | À compter de MSTest 4.2, lorsqu’il est défini sur true, MSTest lance le débogueur lorsqu’un test échoue. |
MapInconclusiveToFailed |
faux | 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 |
vrai | Valeur indiquant si un résultat non exécutable est mappé à un test non réussi. |
OrderTestsByNameInClass |
faux | 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 est par défaut le nombre de processeurs sur l’ordinateur actuel.Scope: étendue de la parallélisation. Vous pouvez le définir sur MethodLevel. Par défaut, il s’agit de ClassLevel.<Parallelize><Workers>32</Workers><Scope>MethodLevel</Scope></Parallelize> |
|
RandomizeTestOrder |
faux | À compter de MSTest 4.3, définissez cette valeur sur true pour exécuter des tests dans un ordre aléatoire, ce qui permet d’afficher les dépendances de classement masquées entre les tests. Ce paramètre ne peut pas être combiné avec OrderTestsByNameInClass. |
RandomTestOrderSeed |
À partir de MSTest 4.3, lorsque RandomizeTestOrder est vrai, définissez une graine entière pour rendre l’ordre aléatoire reproductible d’une exécution à l’autre. Lorsqu’il n’est pas défini, une nouvelle graine est utilisée pour chaque exécution. |
|
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 définir la ForcedLegacyMode valeur true.<ForcedLegacyMode>true</ForcedLegacyMode> |
|
TestCleanupTimeout |
Aucun | Spécifiez globalement le délai d’expiration à appliquer à chaque instance de méthode de nettoyage de test. Le paramètre [Timeout] spécifié sur la méthode de nettoyage des tests remplace le délai d’expiration global. |
TestInitializeTimeout |
Aucun | 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 |
Aucun | Obtient le délai d’expiration du cas de test global spécifié. |
TreatClassAndAssemblyCleanupWarningsAsErrors |
faux | Pour voir vos échecs des nettoyages de classe sous forme d’erreurs, affectez à cette valeur la valeur true. |
TreatDiscoveryWarningsAsErrors |
faux | Pour signaler des avertissements de découverte de tests en tant qu’erreurs, définissez cette valeur sur true. |
Les valeurs de délai d’expiration doivent être des entiers positifs en millisecondes. Pour s’exécuter sans délai d’expiration, omettez l’entrée au lieu de la définir 0sur . Les délais d’expiration des appareils de test globaux héritent de la valeur ou TestCleanupTimeout de la valeur correspondanteTestInitializeTimeout.
élément TestRunParameter
<TestRunParameters>
<Parameter name="webAppUrl" value="http://localhost" />
</TestRunParameters>
Les paramètres d’exécution de test permettent de définir des variables et des valeurs 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 runtime -->
<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, reportez-vous à la documentation du testconfig.json MTP.
À 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.
À compter de MSTest 4.3.3, .NET Framework s’exécute accepte également les commentaires et les virgules de fin dans testconfig.json.
Élément MSTest
Les paramètres MSTest sont regroupés par fonctionnalité décrites dans les sections suivantes.
| Entrée | Par défaut | Descriptif |
|---|---|---|
| ActiverLesMéthodesDeTestDeLaClasseDeBaseDepuisDautresAssemblées | vrai | 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 | Fin de l'assemblage | Si vous souhaitez que le nettoyage de la classe se produise à la fin de la classe, définissez-le sur EndOfClass. |
paramètres assemblyResolution
Tous les paramètres de cette section appartiennent à l’élément assemblyResolution.
| Entrée | Par défaut | Descriptif |
|---|---|---|
| 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" }. |
Exemple:
{
"mstest": {
"assemblyResolution": {
{ "path": "...", "includeSubDirectories": "true/false" }
}
}
}
paramètres deployment
Tous les paramètres de cette section appartiennent à l’élément deployment.
| Entrée | Par défaut | Descriptif |
|---|---|---|
| supprimerLeRépertoireDeDéploiementAprèsLaFinDuTest | vrai | Pour conserver le répertoire de déploiement après une série de tests, définissez cette valeur sur false. |
| deployTestSourceDependencies | vrai | Indique si les références de source de test doivent être déployées. |
| enabled | vrai | 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. |
Exemple:
{
"mstest": {
"deployment": {
"deleteDeploymentDirectoryAfterTestRunIsComplete": true,
"deployTestSourceDependencies": true,
"enabled": true
}
}
}
paramètres output
Tous les paramètres de cette section appartiennent à l’élément output.
| Entrée | Par défaut | Descriptif |
|---|---|---|
| captureTrace | Result |
Capturez, Traceet affichez-le Consoleet Debug associez-le au test actuel. À compter de MSTest 4.4, utilisez None, Resultou Live.
Live fait également écho à la sortie, y compris TestContext.Write* les messages, pendant que le test s’exécute. Les valeurs booléennes restent prises en charge : true mappées à Result, et false mappées à None. |
Exemple:
{
"mstest": {
"output": {
"captureTrace": false
}
}
}
paramètres parallelism
Tous les paramètres de cette section appartiennent à l’élément parallelism.
| Entrée | Par défaut | Descriptif |
|---|---|---|
| enabled | faux | 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. |
Exemple:
{
"mstest": {
"parallelism": {
"enabled": true,
"scope": "method",
"workers": 32
}
}
}
paramètres execution
Tous les paramètres de cette section appartiennent à l’élément execution.
| Entrée | Par défaut | Descriptif |
|---|---|---|
| considerEmptyDataSourceAsInconclusive | faux | Lorsqu’elle est définie sur true, une source de données vide est considérée comme inconclusive. |
| considérerLesFixturesCommeDesTestsSpéciaux | faux | 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. |
| dépendances | À compter de MSTest 4.4, déclarez la dépendance chains de test et nodes. Ce paramètre est disponible uniquement avec Microsoft. Testing.Platform. Pour plus d’informations, consultez Tester les dépendances. |
|
| mapInconclusiveToFailed | faux | 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. |
| lancer le débogueur en cas d’échec du test | faux | À partir de MSTest 4.2, lorsqu’il est défini sur true, MSTest lance le débogueur lorsqu’un test échoue. |
| mapNotRunnableToFailed | vrai | Valeur indiquant si un résultat non exécutable est mappé à un test non réussi. |
| ordonnerTestsParNomDansClasse | faux | Exécutez des tests par ordre alphabétique dans chaque classe. À compter de MSTest 4.3, utilisez mstest.execution.orderTestsByNameInClass. La clé précédente mstest.orderTestsByNameInClass fonctionne toujours, mais génère un avertissement de dépréciation. |
| randomiserOrdreDesTests | faux | À compter de MSTest 4.3, définissez cette valeur pour true exécuter des tests dans un ordre aléatoire, ce qui permet d’afficher les dépendances de classement masquées entre les tests. Ce paramètre ne peut pas être combiné avec orderTestsByNameInClass. |
| randomTestOrderSeed | À partir de MSTest 4.3, lorsque randomizeTestOrder est true, définissez une graine entière pour rendre l’ordre aléatoire reproductible d’une exécution à l’autre. Lorsqu’il n’est pas défini, une nouvelle graine est utilisée pour chaque exécution. |
|
| treatClassAndAssemblyCleanupWarningsAsErrors | faux | Pour voir vos échecs des nettoyages de classe sous forme d’erreurs, affectez à cette valeur la valeur true. |
| TraitementDesAvertissementsDeDécouverteCommeErreurs | faux | Pour signaler des avertissements de découverte de tests en tant qu’erreurs, définissez cette valeur sur true. |
Exemple:
{
"mstest": {
"execution": {
"considerEmptyDataSourceAsInconclusive": false,
"considerFixturesAsSpecialTests": false,
"mapInconclusiveToFailed": true,
"mapNotRunnableToFailed": true,
"treatClassAndAssemblyCleanupWarningsAsErrors": false,
"treatDiscoveryWarningsAsErrors": false
}
}
}
paramètres timeout
Tous les paramètres de cette section appartiennent à l’élément timeout.
| Entrée | Par défaut | Descriptif |
|---|---|---|
| assemblyCleanup | Aucun | Définissez de manière globale le délai d'expiration à appliquer à chaque instance de méthode de nettoyage d'assemblage. |
| assemblyInitialize | Aucun | Spécifiez globalement le délai d’expiration à appliquer à chaque instance de méthode d’initialisation d’assembly. |
| classCleanup | Aucun | Spécifiez globalement le délai d’expiration à appliquer à chaque instance de méthode de nettoyage de classe. |
| classInitialize | Aucun | Spécifiez globalement le délai d’expiration à appliquer à chaque instance de méthode d’initialisation de classe. |
| globalTestCleanup | testCleanup |
À compter de MSTest 4.4, spécifiez le délai d’expiration de chaque méthode de nettoyage de test globale. Lorsque vous omettez cette entrée, MSTest utilise testCleanup. |
| globalTestInitialize | testInitialize |
À compter de MSTest 4.4, spécifiez le délai d’expiration pour chaque méthode d’initialisation de test global. Lorsque vous omettez cette entrée, MSTest utilise testInitialize. |
| essai | Aucun | Spécifiez globalement le délai d’expiration du test. |
| testCleanup | Aucun | Spécifiez globalement le délai d’expiration à appliquer à chaque instance de méthode de nettoyage de test. |
| testInitialize | Aucun | Spécifiez globalement le délai d’expiration à appliquer à chaque instance de méthode d’initialisation de test. |
| useCooperativeCancellation | faux | Lorsqu’il est réglé sur true, en cas de délai d’attente, MSTest déclenche uniquement l’annulation du CancellationToken, mais il continue de surveiller 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
Les valeurs de délai d’expiration doivent être des entiers positifs en millisecondes. Pour s’exécuter sans délai d’expiration, omettez l’entrée au lieu de la définir 0sur . Les délais d’expiration globaux des appareils de test héritent de la valeur correspondante testInitializetestCleanup . Omettez donc les deux entrées lorsque vous ne souhaitez pas de délai d’expiration sur un appareil global. Un [Timeout] attribut sur une méthode remplace le délai d’expiration configuré.
Exemple:
{
"mstest": {
"timeout": { "globalTestInitialize": 30000, "globalTestCleanup": 30000 }
}
}
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": {
"resultDirectory": "./TestResults"
},
"mstest": {
"execution": {
"mapInconclusiveToFailed": true,
"disableAppDomain": true,
"considerFixturesAsSpecialTests": false
},
"parallelism": {
"enabled": true,
"scope": "method"
},
"output": {
"captureTrace": false
}
}
}
Propriétés MSBuild
À compter de MSTest 4.3, optez pour la parallélisation au niveau de l’assembly à partir de votre fichier projet ou Directory.Build.props sans créer d’attribut [assembly: Parallelize] . Ces propriétés émettent l’attribut d’assembly correspondant lors de la génération. Elles doivent GenerateAssemblyInfo donc être true (la valeur par défaut pour les projets de style SDK).
| Propriété | Par défaut | Descriptif |
|---|---|---|
MSTestParallelizeScope |
Étendue de parallélisation. Définissez-le sur MethodLevel ou ClassLevel pour émettre [assembly: Parallelize(Scope = ExecutionScope.MethodLevel)] (ou ExecutionScope.ClassLevel), ou sur None pour émettre [assembly: DoNotParallelize]. |
|
MSTestParallelizeWorkers |
Le nombre maximal de threads de travail, émis sous la forme de la valeur Workers de [assembly: Parallelize]. Une valeur de 0 correspond au nombre de processeurs sur la machine actuelle. Cette propriété ne peut pas être définie quand MSTestParallelizeScope est None. |
MSTest valide les deux propriétés pendant la génération. Les valeurs d’étendue non valides, les nombres de workers non entiers et le nombre de workers combinés avec une None étendue échouent à la build. Ne déclarez [assembly: Parallelize] pas ni [assembly: DoNotParallelize] dans la source, car l’attribut généré le dupliquerait. Lorsque GenerateAssemblyInfo c’est falsele cas, déclarez l’attribut dans la source à la place.
L’exemple suivant active la parallélisation au niveau de la méthode avec quatre workers pour chaque projet de test qui importe le Directory.Build.props fichier :
<Project>
<PropertyGroup>
<MSTestParallelizeScope>MethodLevel</MSTestParallelizeScope>
<MSTestParallelizeWorkers>4</MSTestParallelizeWorkers>
</PropertyGroup>
</Project>