MSTEST0026: Evitare l'accesso condizionale nelle asserzioni
Proprietà | valore |
---|---|
ID regola | MSTEST0026 |
Title | Evitare l'accesso condizionale nelle asserzioni |
Categoria | Utilizzo |
La correzione causa un'interruzione o meno | Non causa un'interruzione |
Abilitata per impostazione predefinita | Sì |
Gravità predefinita | Info |
Introdotto nella versione | 3.5.0 |
Esiste una correzione del codice | No |
Causa
Questa regola genera una diagnostica quando un argomento contenente un operatore condizionale null (?.)
o ?[]
viene passato ai metodi di asserzione seguenti:
Assert.IsTrue
Assert.IsFalse
Assert.AreEqual
Assert.AreNotEqual
Assert.AreSame
Assert.AreNotSame
CollectionAssert.AreEqual
CollectionAssert.AreNotEqual
CollectionAssert.AreEquivalent
CollectionAssert.AreNotEquivalent
CollectionAssert.Contains
CollectionAssert.DoesNotContain
CollectionAssert.AllItemsAreNotNull
CollectionAssert.AllItemsAreUnique
CollectionAssert.AllItemsAreInstancesOfType
CollectionAssert.IsSubsetOf
CollectionAssert.IsNotSubsetOf
StringAssert.Contains
StringAssert.StartsWith
StringAssert.EndsWith
StringAssert.Matches
StringAssert.DoesNotMatch
Descrizione regola
Lo scopo delle asserzioni negli unit test è verificare che siano soddisfatte determinate condizioni. Quando un operatore di accesso condizionale viene usato in un'asserzione, introduce una condizione aggiuntiva che può o meno essere soddisfatta, a seconda dello stato dell'oggetto a cui si accede. Ciò può portare a risultati di test incoerenti e rendere il test meno chiaro.
Come correggere le violazioni
Assicurarsi che gli argomenti non contengano (?.)
o ?[]
quando vengono passati ai metodi di asserzione. Eseguire invece controlli null prima di eseguire l'asserzione.
Company? company = GetCompany();
Assert.AreEqual(company?.Name, "Contoso"); // MSTEST0026
StringAssert.Contains(company?.Address, "Brazil"); // MSTEST0026
// Fixed code
Assert.IsNotNull(company);
Assert.AreEqual(company.Name, "Contoso");
StringAssert.Contains(company.Address, "Brazil");
Quando eliminare gli avvisi
Non si consiglia di eliminare gli avvisi da questa regola.