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.