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
Gravité par défaut Infos
Introduite dans la version 3.5.0
Existe-t-il un correctif 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.