MSTEST0026: Vermeiden des bedingten Zugriffs in Assert-Anweisungen
Eigenschaft | Wert |
---|---|
Regel-ID | MSTEST0026 |
Titel | Vermeiden des bedingten Zugriffs in Assert-Anweisungen |
Kategorie | Verwendung |
Fix führt oder führt nicht zur Unterbrechung | Nicht unterbrechend |
Standardmäßig aktiviert | Ja |
Standardschweregrad | Info |
Eingeführt in Version | 3.5.0 |
Gibt es eine Codekorrektur | No |
Ursache
Diese Regel löst eine Diagnose aus, wenn ein Argument, das einen null-bedingten Operator enthält (z. B. (?.)
oder ?[]
), an die folgenden Assertionsmethoden übergeben wird:
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
Regelbeschreibung
Der Zweck von Assertion-Anweisungen in Komponententests besteht darin, zu überprüfen, ob bestimmte Bedingungen erfüllt sind. Wenn ein Operator für bedingten Zugriff in einer Assert-Anweisung verwendet wird, führt er eine zusätzliche Bedingung ein, die je nach dem Zustand des Objekts, auf das zugegriffen wird, möglicherweise oder nicht erfüllt ist. Dies kann zu inkonsistenten Testergebnissen führen und den Test weniger deutlich machen.
Behandeln von Verstößen
Stellen Sie sicher, dass Argumente nicht (?.)
oder ?[]
enthalten, wenn sie an die Assert-Anweisung übergeben werden. Führen Sie stattdessen NULL-Prüfungen durch, bevor Sie die Assert-Anweisung vornehmen.
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");
Wann sollten Warnungen unterdrückt werden?
Es wird empfohlen, Warnungen bei dieser Regel nicht zu unterdrücken.
Unterdrücken einer Warnung
Wenn Sie nur eine einzelne Verletzung unterdrücken möchten, fügen Sie Ihrer Quelldatei Präprozessordirektiven hinzu, um die Regel zu deaktivieren und dann erneut zu aktivieren.
#pragma warning disable MSTEST0026
// The code that's violating the rule is on this line.
#pragma warning restore MSTEST0026
Um die Regel für eine Datei, einen Ordner oder ein Projekt zu deaktivieren, legen Sie den Schweregrad in der Konfigurationsdateiauf none
fest.
[*.{cs,vb}]
dotnet_diagnostic.MSTEST0026.severity = none
Weitere Informationen finden Sie unter So unterdrücken Sie Codeanalysewarnungen.