Anmerkung
Der Zugriff auf diese Seite erfordert eine Genehmigung. Du kannst versuchen, dich anzumelden oder die Verzeichnisse zu wechseln.
Der Zugriff auf diese Seite erfordert eine Genehmigung. Du kannst versuchen , die Verzeichnisse zu wechseln.
MSTEST0006: Vermeiden von
| Property | Value |
|---|---|
| Regel-ID | MSTEST0006 |
| Title | Vermeiden von [ExpectedException] |
| Category | Design |
| Korrektur ist blockierend oder nicht-blockierend | Non-breaking |
| Standardmäßig aktiviert | Yes |
| Voreingestellte Schwere | Warnung beginnend mit 3.10, Info davor |
| Eingeführt in der Version | 3.2.0 |
| Gibt es eine Codekorrektur | Ja, ab 3.7.0. |
Hinweis
Dieser Analyzer ist für MSTest 4 nicht mehr relevant, da das Attribut entfernt wurde.
Cause
Eine Methode ist mit dem [ExpectedException]-Attribut gekennzeichnet.
Regelbeschreibung
Bevorzugen Sie Assert.ThrowsException oder Assert.ThrowsExceptionAsync (oder Assert.ThrowsExactly/Assert.Throws oder Assert.ThrowsExactlyAsync/Assert.ThrowsAsync bei Verwendung von MSTest 3.8 und höher) statt des Attributs [ExpectedException], da sichergestellt wird, dass nur die erwartete Codezeile die erwartete Ausnahme auslöst, anstatt auf den gesamten Testkörper zu wirken. Die Assert-APIs bieten zudem mehr Flexibilität und ermöglichen es Ihnen, zusätzliche Eigenschaften der Ausnahme zu bestätigen.
[TestClass]
public class TestClass
{
[TestMethod]
[ExpectedException(typeof(InvalidOperationException))] // Violation
public void TestMethod()
{
// Arrange
var person = new Person
{
FirstName = "John",
LastName = "Doe",
};
person.SetAge(-1);
// Act
person.GrowOlder();
}
}
Behandeln von Verstößen
Ersetzen Sie die Verwendung des [ExpectedException]-Attributs durch einen Aufruf von Assert.ThrowsException oder Assert.ThrowsExceptionAsync (oder Assert.ThrowsExactly/Assert.Throws oder Assert.ThrowsExactlyAsync/Assert.ThrowsAsync, wenn Sie MSTest 3.8 und später verwenden).
[TestClass]
public class TestClass
{
[TestMethod]
public void TestMethod()
{
// Arrange
var person = new Person
{
FirstName = "John",
LastName = "Doe",
};
person.SetAge(-1);
// Act
Assert.ThrowsExactly(() => person.GrowOlder());
}
}
Wann sollten Warnungen unterdrückt werden?
Es ist sicher, diese Diagnose zu unterdrücken, wenn die Methode einzeilig ist.
[TestClass]
public class TestClass
{
[TestMethod]
[ExpectedException(typeof(ArgumentNullException))]
public void TestMethod()
{
new Person(null);
}
}
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 MSTEST0006
// The code that's violating the rule is on this line.
#pragma warning restore MSTEST0006
Deaktivieren Sie die Regel für eine Datei, einen Ordner oder ein Projekt, indem Sie den Schweregrad in der none auf setzen.
[*.{cs,vb}]
dotnet_diagnostic.MSTEST0006.severity = none
Weitere Informationen finden Sie unter Vorgehensweise: Unterdrücken von Codeanalyse-Warnungen.