Partage via


MSTEST0038 : N'utilisez pas 'Assert.AreSame' ou 'Assert.AreNotSame' avec des types de valeurs.

Property Valeur
Identificateur de la règle MSTEST0038
Titre N'utilisez pas 'Assert.AreSame' ou 'Assert.AreNotSame' avec des types de valeurs.
Catégorie Utilisation
Le correctif est cassant ou non cassant Sans rupture
Activé par défaut Oui
Sévérité par défaut Warning
Introduit dans la version 3.8.0
Existe-t-il une correction de code Oui

Cause

L'utilisation de Assert.AreSame ou Assert.AreNotSame avec un ou les deux arguments étant un type de valeur.

Description de la règle

Assert.AreSame et Assert.AreNotSame fonctionnent en comparant la référence des arguments expected/notExpected et réels donnés via ReferenceEquals. Par conséquent, lorsque vous passez un type valeur, il est encapsulé.

Si vous utilisez AreSame, l'assert échouera toujours. Lors de l'utilisation de AreNotSame, l'assertion passe toujours.

Pour AreSame, le seul cas où l'assert passe est si les deux arguments sont des types de valeurs nullables dont les valeurs sont toutes deux null. Dans ce cas, il est plus clair d'avoir deux appels Assert.IsNull distincts.

Comment corriger les violations

Utilisez Assert.AreEqual et Assert.AreNotEqual au lieu de Assert.AreSame et Assert.AreNotSame. Si vous utilisez Assert.AreSame et que les deux arguments sont des types de valeurs nullables dont les valeurs sont censées être null, alors deux appels Assert.IsNull séparés peuvent être plus appropriés que AreEqual, en fonction de l'intention du test.

Quand supprimer les avertissements

Ne supprimez pas un avertissement lié à cette règle. Si vous ignorez cette règle, vous obtiendrez une assertion qui échouera toujours ou qui passera toujours.