MSTEST0026: Vyhněte se podmíněnému přístupu v kontrolních výrazech
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.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
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.