Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
MSTEST0058: Vermeiden von Assertionen in
| Eigentum | Wert |
|---|---|
| Regel-ID | MSTEST0058 |
| Title | Vermeiden von Assertionen in Catch-Blöcken |
| Kategorie | Usage |
| Die Behebung ist eingreifend oder nicht eingreifend | Non-breaking |
| Standardmäßig aktiviert | Yes |
| Voreingestellte Schwere | Info |
| wurde in Version eingeführt. | 4.1.0 |
| Gibt es eine Codekorrektur | Nein |
Ursache
Eine Testmethode enthält Assertionsanweisungen innerhalb eines catch Blocks.
Regelbeschreibung
Das Platzieren von Assertionen in catch Blöcken ist ein Antimuster, das zu verwirrenden Testergebnissen führen kann und Tests schwieriger zu verstehen macht. Wenn eine Ausnahme ausgelöst wird, wird der catch Block ausgeführt, und die Assertion wird ausgeführt. Wenn jedoch keine Ausnahme ausgelöst wird, wird der catch Block niemals ausgeführt, was möglicherweise fälschlicherweise den Eindruck erweckt, dass der Test erfolgreich war.
Verwenden Sie Assert.Throws stattdessen oder ähnliche Methoden, um zu überprüfen, ob erwartete Ausnahmen ausgelöst werden. Dadurch wird die Testabsicht klarer und das ordnungsgemäße Testverhalten sichergestellt.
[TestClass]
public class TestClass
{
[TestMethod]
public void TestMethod()
{
try
{
// Code that might throw.
DoSomethingThatMightThrow();
}
catch (Exception ex)
{
Assert.AreEqual("Expected error message", ex.Message); // Violation
}
}
}
Wie man Verstöße behebt
Verwenden Sie Assert.Throws, Assert.ThrowsExactly oder verwandte Assertionsmethoden, um Ausnahmen zu testen.
[TestClass]
public class TestClass
{
[TestMethod]
public void TestMethod_ThrowsExceptionWithExpectedMessage()
{
InvalidOperationException exception = Assert.Throws<InvalidOperationException>(() => DoSomethingThatMightThrow());
Assert.AreEqual("Expected error message", exception.Message);
}
}
Wann sollten Warnungen unterdrückt werden?
Sie können diese Warnung unterdrücken, wenn Sie eine legitime Notwendigkeit haben, eine Ausnahme abzufangen und komplexe Überprüfungen durchzuführen, die nicht einfach mithilfe von Standard assertionsmethoden ausgedrückt werden können. Erwägen Sie jedoch die Umgestaltung Ihres Tests, um explizitere Ausnahme assertionen zuerst zu verwenden.
Unterdrücken einer Warnung
Um nur eine einzelne Verletzung zu unterdrücken, fügen Sie der Quelldatei Präprozessoranweisungen hinzu, um die Regel zu deaktivieren und dann wieder zu aktivieren.
#pragma warning disable MSTEST0058
// The code that's violating the rule is on this line.
#pragma warning restore MSTEST0058
Um die Regel für eine Datei, einen Ordner oder ein Projekt zu deaktivieren, setzen Sie dessen Schweregrad auf none in der Konfigurationsdatei fest.
[*.{cs,vb}]
dotnet_diagnostic.MSTEST0058.severity = none
Weitere Informationen finden Sie unter Vorgehensweise: Unterdrücken von Codeanalyse-Warnungen.