Udostępnij za pośrednictwem


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("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");

Kiedy pomijać ostrzeżenia

Nie zalecamy pomijania ostrzeżeń z tej reguły.