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 (od 3.5 do 3.7). Nie (począwszy od wersji 3.8) |
Ważność domyślna | Informacje |
Wprowadzone w wersji | 3.5.0 |
czy 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.
Pomijanie ostrzeżenia
Jeśli chcesz po prostu pominąć pojedyncze naruszenie, dodaj dyrektywy preprocesora do pliku źródłowego, aby wyłączyć, a następnie ponownie włączyć regułę.
#pragma warning disable MSTEST0026
// The code that's violating the rule is on this line.
#pragma warning restore MSTEST0026
Aby wyłączyć regułę dla pliku, folderu lub projektu, ustaw jego ważność na none
w pliku konfiguracji .
[*.{cs,vb}]
dotnet_diagnostic.MSTEST0026.severity = none
Aby uzyskać więcej informacji, zobacz Jak pominąć ostrzeżenia analizy kodu.