Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
MSTEST0065 : Éviter
| Propriété | Value |
|---|---|
| Identificateur de la règle | MSTEST0065 |
| Titre | Éviter Assert.AreEqual pour les types de collection |
| Catégorie | Usage |
| Le correctif a un effet disruptif ou non disruptif | Non-breaking |
| Activé par défaut | Oui |
| Sévérité par défaut | Warning |
| Introduit dans la version | 4.3.0 |
| Existe-t-il une correction de code | No |
Note
Cette règle est disponible à partir de MSTest 4.3.
À compter de MSTest 4.3.3, la règle ne signale pas les types de collection qui déclarent leur propre comportement d’égalité.
Cause
Un appel à Assert.AreEqual ou Assert.AreNotEqual est effectué sur une valeur dont le type statique implémente IEnumerable<T> (autre que String).
Description de la règle
AreEqual et AreNotEqual utiliser EqualityComparer<T>.Default. Pour la plupart des types de collection , par exemple des tableaux, List<T>ou tout type IEnumerable<T> défini par l’utilisateur, cela revient à l’égalité de référence (ou à l’égalité définie par le type pour lui-même) et non à une comparaison à l’échelle des éléments. Par conséquent, l’assertion n’affirme presque jamais ce que l’auteur du test a prévu.
[TestClass]
public class TestClass
{
[TestMethod]
public void Test()
{
var expected = new[] { 1, 2, 3 };
var actual = new[] { 1, 2, 3 };
// Violation: this compares references, not contents, and fails.
Assert.AreEqual(expected, actual);
}
}
Comment corriger les violations
Choisissez l’assertion qui correspond à votre intention :
- Utiliser
Assert.AreSequenceEqualpour la comparaison ordonnée des éléments. - Utilisez
Assert.AreSequenceEqual(expected, actual, SequenceOrder.InAnyOrder)pour une comparaison élément par élément non ordonnée. - Utiliser
Assert.AreEquivalentpour une comparaison structurelle approfondie.
[TestClass]
public class TestClass
{
[TestMethod]
public void Test()
{
var expected = new[] { 1, 2, 3 };
var actual = new[] { 1, 2, 3 };
Assert.AreSequenceEqual(expected, actual);
}
}
Quand supprimer les avertissements
Supprimez cet avertissement uniquement si le type définit son propre Equals/GetHashCode pour comparer les contenus et que vous vous appuyez intentionnellement dessus.
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 MSTEST0065
// The code that's violating the rule is on this line.
#pragma warning restore MSTEST0065
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.MSTEST0065.severity = none
Pour plus d’informations, consultez Comment supprimer les avertissements d’analyse du code.