Freigeben über


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.