Freigeben über


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.