MSTEST0006: Vermeiden von [ExpectedException]
Eigenschaft | Wert |
---|---|
Regel-ID | MSTEST0006 |
Titel | Vermeiden von [ExpectedException] |
Kategorie | Design |
Fix führt oder führt nicht zur Unterbrechung | Nicht unterbrechend |
Standardmäßig aktiviert | Ja |
Standardschweregrad | Info |
Eingeführt in Version | 3.2.0 |
Gibt es eine Codekorrektur | Ja, beginnend mit 3.7.0 |
Ursache
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
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 MSTEST0006
// The code that's violating the rule is on this line.
#pragma warning restore MSTEST0006
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.MSTEST0006.severity = none
Weitere Informationen finden Sie unter So unterdrücken Sie Codeanalysewarnungen.