Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
| 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.