MSTEST0026: Unikaj dostępu warunkowego w asercji
Właściwości | Wartość |
---|---|
Identyfikator reguły | MSTEST0026 |
Tytuł | Unikanie dostępu warunkowego w asercji |
Kategoria | Użycie |
Poprawka powodująca niezgodność lub niezgodność | Niezgodność |
Domyślnie włączone | Tak |
Ważność domyślna | Informacje |
Wprowadzone w wersji | 3.5.0 |
Istnieje poprawka kodu | Nie. |
Przyczyna
Ta reguła zgłasza diagnostykę, gdy argument zawierający operator (?.)
warunkowy o wartości null lub ?[]
jest przekazywany do poniższych metod asercji:
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
Opis reguły
Celem asercji w testach jednostkowych jest sprawdzenie, czy spełnione są pewne warunki. Gdy operator dostępu warunkowego jest używany w asercji, wprowadza dodatkowy warunek, który może lub nie zostanie spełniony, w zależności od stanu uzyskiwania dostępu do obiektu. Może to prowadzić do niespójnych wyników testów i uczynić test mniej przejrzystym.
Jak naprawić naruszenia
Upewnij się, że argumenty nie zawierają (?.)
metod asercji ani ?[]
nie są przekazywane do tych metod. Zamiast tego należy wykonać kontrole wartości null przed dokonaniem potwierdzenia.
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");
Kiedy pomijać ostrzeżenia
Nie zalecamy pomijania ostrzeżeń z tej reguły.