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 |
|---|---|
| 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ì (da 3.5 a 3.7). No (a partire dalla versione 3.8) |
| Gravità predefinita | Info |
| Introdotto nella versione | 3.5.0 |
| È presente 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.IsTrueAssert.IsFalseAssert.AreEqualAssert.AreNotEqualAssert.AreSameAssert.AreNotSameCollectionAssert.AreEqualCollectionAssert.AreNotEqualCollectionAssert.AreEquivalentCollectionAssert.AreNotEquivalentCollectionAssert.ContainsCollectionAssert.DoesNotContainCollectionAssert.AllItemsAreNotNullCollectionAssert.AllItemsAreUniqueCollectionAssert.AllItemsAreInstancesOfTypeCollectionAssert.IsSubsetOfCollectionAssert.IsNotSubsetOfStringAssert.ContainsStringAssert.StartsWithStringAssert.EndsWithStringAssert.MatchesStringAssert.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("Contoso", company?.Name); // MSTEST0026
StringAssert.Contains(company?.Address, "Brazil"); // MSTEST0026
// Fixed code
Assert.IsNotNull(company);
Assert.AreEqual("Contoso", company.Name);
StringAssert.Contains(company.Address, "Brazil");
Quando eliminare gli avvisi
Non si consiglia di eliminare gli avvisi da questa regola.
Eliminare un avviso
Se si vuole eliminare una singola violazione, aggiungere direttive del preprocessore al file di origine per disabilitare e quindi riabilitare la regola.
#pragma warning disable MSTEST0026
// The code that's violating the rule is on this line.
#pragma warning restore MSTEST0026
Per disabilitare la regola per un file, una cartella o un progetto, impostarne la gravità su none nel file di configurazione .
[*.{cs,vb}]
dotnet_diagnostic.MSTEST0026.severity = none
Per altre informazioni, vedere Come eliminare gli avvisi di analisi del codice.