Condividi tramite


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
di gravità predefinita Avvertimento
introdotta nella versione 3.8.0
È presente una correzione del codice

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.