Partager via


MSTEST0026 : éviter l’accès conditionnel dans les assertions

Propriété Value
Identificateur de la règle MSTEST0026
Titre Éviter l’accès conditionnel dans les assertions
Catégorie Utilisation
Le correctif est cassant ou non cassant Sans rupture
Activé par défaut Oui (de 3.5 à 3.7). Non (à partir de 3.8)
Gravité par défaut Infos
Introduite dans la version 3.5.0
Existe-t-il une correction de code Non

Cause

Cette règle déclenche un diagnostic lorsqu’un argument contenant un opérateur conditionnel Null(?.) ou ?[] est passé aux méthodes d’assertion ci-dessous :

  • Assert.IsTrue
  • Assert.IsFalse
  • Assert.AreEqual
  • Assert.AreNotEqual
  • Assert.AreSame
  • Assert.AreNotSame
  • CollectionAssert.AreEqual
  • CollectionAssert.AreNotEqual
  • CollectionAssert.AreEquivalent
  • CollectionAssert.AreNotEquivalent
  • CollectionAssert.Contains
  • CollectionAssert.DoesNotContain
  • CollectionAssert.AllItemsAreNotNull
  • CollectionAssert.AllItemsAreUnique
  • CollectionAssert.AllItemsAreInstancesOfType
  • CollectionAssert.IsSubsetOf
  • CollectionAssert.IsNotSubsetOf
  • StringAssert.Contains
  • StringAssert.StartsWith
  • StringAssert.EndsWith
  • StringAssert.Matches
  • StringAssert.DoesNotMatch

Description de la règle

L’objectif des assertions dans les tests unitaires est de vérifier que certaines conditions sont remplies. Lorsqu’un opérateur d’accès conditionnel est utilisé dans une assertion, il introduit une condition supplémentaire qui peut ou non être remplie, en fonction de l’état de l’objet accessible. Cela peut entraîner des résultats de test incohérents et rendre le test moins clair.

Comment corriger les violations

Vérifiez que les arguments ne contiennent (?.) pas ou ?[] lorsqu’ils sont passés aux méthodes d’assertion. Au lieu de cela, effectuez des vérifications null avant d’effectuer l’assertion.

Company? company = GetCompany();
Assert.AreEqual("Contoso", company?.Name); // MSTEST0026
StringAssert.Contains(company?.Address, "Brazil"); // MSTEST0026

// Fixed code
Assert.IsNotNull(company);
Assert.AreEqual("Contoso", company.Name);
StringAssert.Contains(company.Address, "Brazil");

Quand supprimer les avertissements

Nous vous déconseillons de supprimer les avertissements de cette règle.

Supprimer un avertissement

Si vous voulez supprimer une seule violation, ajoutez des directives de préprocesseur à votre fichier source pour désactiver et réactiver la règle.

#pragma warning disable MSTEST0026
// The code that's violating the rule is on this line.
#pragma warning restore MSTEST0026

Pour désactiver la règle sur un fichier, un dossier ou un projet, définissez sa gravité sur none dans le fichier de configuration.

[*.{cs,vb}]
dotnet_diagnostic.MSTEST0026.severity = none

Pour plus d’informations, consultez Comment supprimer les avertissements de l’analyse de code.