Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
| Vlastnost | Hodnota |
|---|---|
| ID pravidla | MSTEST0026 |
| Název | Vyhněte se podmíněnému přístupu v kontrolních výrazech |
| Kategorie | Využití |
| Oprava způsobující chybu nebo chybu způsobující chybu | Nenarušující |
| Povoleno ve výchozím nastavení | Ano (od 3.5 do 3.7). Ne (počínaje verzí 3,8) |
| Výchozí závažnost | Informace |
| Představeno ve verzi | 3.5.0 |
| Existuje oprava kódu | No |
Příčina
Toto pravidlo vyvolá diagnostiku, pokud je argument obsahující podmíněný operátor(?.) null nebo ?[] předán následující metody kontrolního výrazu:
Assert.IsTrueAssert.IsFalseAssert.AreEqualAssert.AreNotEqualAssert.AreSameAssert.AreNotSameCollectionAssert.AreEqualCollectionAssert.AreNotEqualCollectionAssert.AreEquivalentCollectionAssert.AreNotEquivalentCollectionAssert.ContainsCollectionAssert.DoesNotContainCollectionAssert.AllItemsAreNotNullCollectionAssert.AllItemsAreUniqueCollectionAssert.AllItemsAreInstancesOfTypeCollectionAssert.IsSubsetOfCollectionAssert.IsNotSubsetOfStringAssert.ContainsStringAssert.StartsWithStringAssert.EndsWithStringAssert.MatchesStringAssert.DoesNotMatch
Popis pravidla
Účelem kontrolníchvýrazchch Pokud je operátor podmíněného přístupu použit v kontrolním výrazu, zavádí další podmínku, která může nebo nemusí být splněna v závislosti na stavu objektu, ke kterému se přistupuje. To může vést k nekonzistentním výsledkům testů a testování bude méně jasné.
Jak opravit porušení
Ujistěte se, že argumenty neobsahují (?.) metody kontrolního výrazu nebo ?[] při předání metodám kontrolního výrazu. Místo toho před provedením kontrolního výrazu proveďte kontroly null.
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");
Kdy potlačit upozornění
Nedoporučujeme potlačit upozornění z tohoto pravidla.
Potlačení upozornění
Pokud chcete pouze potlačit jedno porušení, přidejte do zdrojového souboru direktivy preprocesoru, abyste pravidlo zakázali a znovu povolili.
#pragma warning disable MSTEST0026
// The code that's violating the rule is on this line.
#pragma warning restore MSTEST0026
Chcete-li pravidlo pro soubor, složku nebo projekt zakázat, nastavte jeho závažnost na none v konfiguračním souboru .
[*.{cs,vb}]
dotnet_diagnostic.MSTEST0026.severity = none
Další informace naleznete v tématu Jak potlačit upozornění analýzy kódu.