Sdílet prostřednictvím


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.