Règles d’utilisation de MSTest

Les règles d’utilisation prennent en charge l’utilisation appropriée des attributs, méthodes et modèles MSTest. Ces règles interceptent les erreurs courantes et garantissent que vos tests suivent les exigences et conventions du cadre.

Règles dans cette catégorie

ID de règle Titre Niveau de gravité Correctif disponible
MSTEST0002 La classe de test doit être valide. Avertissement Oui
MSTEST0003 La méthode de test doit être valide. Avertissement → Erreur* Oui
MSTEST0005 TestContext doit être valide. Avertissement Oui
MSTEST0007 Utilisez l’attribut sur la méthode de test. Avertissement Non
MSTEST0008 TestInitialize doit être valide. Avertissement Oui
MSTEST0009 TestCleanup doit être valide. Avertissement Oui
MSTEST0010 ClassInitialize doit être valide. Avertissement Oui
MSTEST0011 ClassCleanup doit être valide. Avertissement Oui
MSTEST0012 AssemblyInitialize doit être valide. Avertissement Oui
MSTEST0013 AssemblyCleanup doit être valide. Avertissement Oui
MSTEST0014 DataRow doit être valide. Avertissement Oui
MSTEST0017 Les arguments d’assertion doivent être passés dans l’ordre correct. Informations Oui
MSTEST0018 DynamicData doit être valide. Avertissement Oui
MSTEST0023 Ne pas nier l'expression booléenne. Informations Oui
MSTEST0024 Ne stockez pas testContext statique. Avertissement Non
MSTEST0026 Les arguments d’assertion doivent éviter l’accès conditionnel. Informations Non
MSTEST0030 Le type contenant la méthode de test doit être une classe de test. Avertissement Oui
MSTEST0031 N’utilisez pas System.ComponentModel.DescriptionAttribute. Informations Oui
MSTEST0032 Passez en revue la condition d’assertion toujours-vraie. Informations Non
MSTEST0034 Utilisez ClassCleanupBehavior.EndOfClass. Informations Oui
MSTEST0035 Utilisez DeploymentItem avec une méthode de test ou une classe de test. Informations Non
MSTEST0037 Utilisez les méthodes d’assertion appropriées. Informations Oui
MSTEST0038 Évitez Assert.AreSame avec des types de valeur. Informations Oui
MSTEST0039 Utilisez des méthodes Assert.Throws plus récentes. Informations Oui
MSTEST0040 Évitez d’utiliser des assertions dans un contexte void asynchrone. Avertissement Non
MSTEST0041 Utilisez des attributs basés sur des conditions avec une classe de test. Avertissement Oui
MSTEST0042 Doublon de DataRow. Avertissement Non
MSTEST0043 Utilisez l’attribut de nouvelle tentative sur la méthode de test. Avertissement → Erreur* Oui
MSTEST0046 Utilisez Assert au lieu de StringAssert. Informations Oui
MSTEST0048 Utilisation des propriétés TestContext. Avertissement Non
MSTEST0049 Flow TestContext CancellationToken. Informations Oui
MSTEST0050 Le dispositif de test global doit être valide. Avertissement Oui
MSTEST0051 Assert.Throws doit contenir une instruction unique. Informations Oui
MSTEST0052 Évitez DynamicDataSourceType explicite. Informations Oui
MSTEST0053 Évitez les paramètres de format Assert. Informations Oui
MSTEST0054 Utilisez la propriété CancellationToken. Informations Oui
MSTEST0055 N’ignorez pas la valeur de retour de la méthode de chaîne. Avertissement Non
MSTEST0056 TestMethodAttribute doit définir DisplayName correctement. Informations Oui
MSTEST0057 TestMethodAttribute doit propager les informations sources. Avertissement Non
MSTEST0058 Évitez les assertions dans les blocs catch. Informations Non
MSTEST0059 Utilisez correctement l’attribut Parallelize. Avertissement Non
MSTEST0060 Le doublon de TestMethodAttribute. Avertissement Oui
MSTEST0061 Utilisez l’attribut OSCondition au lieu de la vérification du runtime. Informations Oui
MSTEST0062 Évitez les paramètres de méthode de test out/ref. Avertissement Oui
MSTEST0063 La classe de test doit avoir un constructeur valide. Avertissement Non
MSTEST0064 Préférez les méthodes d’assertion asynchrones. Informations Non
MSTEST0065 Évitez Assert.AreEqual sur les types de collection. Avertissement Non
MSTEST0067 Évitez de bloquer de façon synchrone les appels dans le code de test. Informations (désactivées par défaut) Non
MSTEST0068 Utilisez Assert au lieu de CollectionAssert. Informations Oui
MSTEST0069 La valeur héritée [TestClass] est ignorée par le générateur de source MSTest. Avertissement Non
MSTEST0070 [MemberCondition] les arguments doivent être valides. Avertissement Non
MSTEST0071 La méthode de test ne doit pas spécifier un nom d’affichage identique à son nom. Informations Oui
MSTEST0072 [AssemblyFixtureProvider] n’est pas pris en charge avec la compilation anticipée. Avertissement Non
MSTEST0073 Préférez une constante pour la clé de [ResourceLock]ressource. Informations Non
MSTEST0074 Un test qui modifie l’état global du processus doit déclarer un verrou de ressource. Informations Oui
MSTEST0075 Évitez de modifier le répertoire actif dans un test parallélisé. Informations Oui
MSTEST0076 Évitez de modifier la culture globale du processus lors d’un test parallélisé. Informations Non
MSTEST0077 Évitez les chemins de système de fichiers codés en dur ou partagés dans un test parallélisé. Informations Non
MSTEST0078 [DependsOn] les arguments doivent être valides. Avertissement Non
MSTEST0079 Utilisez l’attribut ArchitectureCondition au lieu des vérifications d’exécution. Informations Oui
MSTEST0080 Utilisez l’attribut CICondition au lieu des vérifications d’environnement. Informations Oui
MSTEST0081 [TestFilterProvider] doit référencer un type de filtre de test valide. Avertissement Non
MSTEST0082 Une classe de test hérite d’un cycle de vie ou d’une méthode de test d’une autre version MSTest. Avertissement Non
MSTEST0083 Utilisez [ExecutableCondition] plutôt que d’effectuer des vérifications File.Exists avant Process.Start. Informations Oui

* Élevé au statut d'erreur dans les modes Recommended et All.

Scénarios courants

Validation de la structure de test

Vérifiez que vos classes, méthodes et appareils de test respectent les exigences MSTest :

  • MSTEST0002 : exigences de disposition des classes de test (par exemple, publiques, non statiques).
  • MSTEST0003 : exigences de disposition des méthodes de test (️⚠️ réaffectées à l’erreur).
  • MSTEST0030 : les méthodes avec [TestMethod] doivent se trouver dans une [TestClass].
  • MSTEST0063 : validation du constructeur de classe de test.
  • MSTEST0069 : Appliquez [TestClass] directement afin que la découverte générée par la source recherche la classe.
  • MSTEST0082 : conservez les classes de test de base et dérivées sur la même version principale MSTest.

Méthodes de cycle de vie

Valider les méthodes d’initialisation et de nettoyage :

  • MSTEST0008 : TestInitialize validation.
  • MSTEST0009 : validation de TestCleanup.
  • MSTEST0010 : ClassInitialize Validation.
  • MSTEST0011: Validation de ClassCleanup.
  • MSTEST0012 : AssemblyInitialize validation.
  • MSTEST0013 : validation de l'AssemblyCleanup.
  • MSTEST0034 : définir ClassCleanupBehavior.EndOfClass.
  • MSTEST0050 : validation globale des appareils de test.
  • MSTEST0072 : n’utilisez pas de fournisseurs de montage partagés avec la compilation anticipée.
  • MSTEST0082 : recompiler les méthodes de cycle de vie héritées par rapport à la version MSTest du projet de test.

Tests pilotés par les données

Vérifiez que les attributs de données sont utilisés correctement :

  • MSTEST0007 : les attributs de données doivent être sur les méthodes de test.
  • MSTEST0014 : validation de DataRow.
  • MSTEST0018 : DynamicData validation.
  • MSTEST0042 : détecter les dataRows dupliqués.
  • MSTEST0052 : Utiliser AutoDetect pour DynamicDataSourceType.
  • MSTEST0062 : Évitez les paramètres out/ref.

Écriture d’assertions meilleures

Règles d’utilisation correcte et efficace des assertions :

  • MSTEST0017 : Passez la valeur attendue/réelle dans l’ordre correct.
  • MSTEST0023 : ne pas nier les conditions (utilisez Assert.IsFalse directement).
  • MSTEST0026 : évitez les opérateurs conditionnels Null dans les assertions.
  • MSTEST0032 : passez en revue les conditions toujours vraies.
  • MSTEST0037 : utilisez la méthode d’assertion la plus appropriée.
  • MSTEST0038 : n’utilisez pas AreSame avec des types valeur.
  • MSTEST0039 : Utilisez Assert.ThrowsExactly (API plus récente).
  • MSTEST0046 : Préférer Assert sur StringAssert.
  • MSTEST0051 : Assert.Throws doit tester une instruction unique.
  • MSTEST0053 : utilisez l’interpolation de chaîne au lieu des paramètres de format.
  • MSTEST0058 : ne placez pas d’assertions dans les blocs catch.
  • MSTEST0064 : préférer les méthodes d’assertion asynchrones au blocage sur le code asynchrone.
  • MSTEST0065 : Évitez d’utiliser Assert.AreEqual sur les types de collection.
  • MSTEST0068 : Préférer Assert à CollectionAssert.

Utilisation de TestContext

Utilisation appropriée de l’objet TestContext :

  • MSTEST0005 : validation de propriété TestContext.
  • MSTEST0024 : ne stockez pas TestContext dans des champs statiques.
  • MSTEST0048 : accès restreint aux propriétés dans les fixtures de test.
  • MSTEST0049 : jetons d’annulation de flux de TestContext.
  • MSTEST0054 : utilisez la propriété TestContext.CancellationToken.

Modèles asynchrones

Règles pour le code de test asynchrone :

  • MSTEST0040 : Évitez les assertions dans les méthodes void asynchrones.
  • MSTEST0067 : Évitez Thread.Sleep, Task.Waitet d’autres appels bloquants de manière synchrone dans le code de test (opt-in).

Sécurité des tests parallèles

Règles pour les tests qui s’exécutent en parallèle :

  • MSTEST0073 : utilisez des constantes partagées pour les clés de verrouillage de ressources.
  • MSTEST0074 : verrouiller les mutations à l’état global du processus.
  • MSTEST0075 : verrouiller les modifications du répertoire actuel.
  • MSTEST0076 : Évitez les mutations de culture à l’échelle du processus.
  • MSTEST0077 : Évitez les chemins de système de fichiers partagés.

Configuration de test

  • MSTEST0031 : Utilisez des attributs appropriés (et non System.ComponentModel.Description).
  • MSTEST0035 : Utilisation de DeploymentItem.
  • MSTEST0041 : les attributs de condition doivent être sur les classes de test.
  • MSTEST0043 : les attributs de réessai doivent être sur les méthodes de test (️⚠️ escaladé à Erreur).
  • MSTEST0055 : n’ignorez pas les valeurs de retour de la méthode de chaîne.
  • MSTEST0056 : définissez DisplayName correctement sur TestMethodAttribute.
  • MSTEST0057 : Propager l'information source dans un TestMethodAttribute personnalisé.
  • MSTEST0059 : n’utilisez pas à la fois Parallelize et DoNotParallelize.
  • MSTEST0060 : Évitez les doublons TestMethodAttribute.
  • MSTEST0061 : utilisez l’attribut OSCondition pour les vérifications de plateforme.
  • MSTEST0070 : [MemberCondition] les arguments doivent référencer des membres valides.
  • MSTEST0071: Ne définissez pas un nom d’affichage identique au nom de la méthode de test.
  • MSTEST0078 : Valider [DependsOn] les cibles et les graphiques de dépendance.
  • MSTEST0079 : utilisez ArchitectureCondition plutôt que des vérifications d’architecture d’exécution.
  • MSTEST0080 : utilisez CICondition plutôt que des vérifications d’environnement.
  • MSTEST0081 : valider les inscriptions des fournisseurs de filtres de test.
  • MSTEST0082 : détecter les tests hérités et les méthodes de cycle de vie compilées sur une autre version principale MSTest.
  • MSTEST0083 : utilisez ExecutableCondition au lieu d’une vérification exécutable impérative.