MSTEST0038: Non usare 'Assert.AreSame' o 'Assert.AreNotSame' con tipi di valore
Proprietà | Valore |
---|---|
Regola ID | MSTEST0038 |
Titolo | Non usare 'Assert.AreSame' o 'Assert.AreNotSame' con tipi di valore |
categoria | Uso |
La correzione causa un'interruzione o non interruzione | Nessuna interruzione |
Abilitato per impostazione predefinita | Sì |
di gravità predefinita | Avvertimento |
introdotta nella versione | 3.8.0 |
È presente una correzione del codice | Sì |
Causa
Utilizzo di Assert.AreSame o Assert.AreNotSame con uno o entrambi gli argomenti come tipo valore.
Descrizione regola
Assert.AreSame e Assert.AreNotSame funzionano confrontando il riferimento dei expected
/notExpected
specificati e gli argomenti effettivi tramite ReferenceEquals
. Di conseguenza, quando si passa un tipo di valore, viene boxed.
Se si usa AreSame
, l'asserzione avrà sempre esito negativo. Se si usa AreNotSame
, l'asserzione passerà sempre.
Per AreSame
, l'unico caso in cui l'assert passa è se entrambi gli argomenti sono tipi di valore a valori nullabili i cui valori sono entrambi null. In questo caso, è più chiaro avere due chiamate Assert.IsNull
separate.
Come correggere le violazioni
Usare Assert.AreEqual
e Assert.AreNotEqual
anziché Assert.AreSame
e Assert.AreNotSame
.
Se si utilizza Assert.AreSame
ed entrambi gli argomenti sono tipi valore nullable i cui valori ci si aspetta siano null, allora due chiamate separate a Assert.IsNull
potrebbero essere più adatte rispetto a AreEqual
, a seconda della finalità del test.
Quando eliminare gli avvisi
Non eliminare un avviso da questa regola. Ignorando questa regola risulterà in un'asserzione che fallirà sempre o riuscirà sempre.