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

Ursache

Eine Methode ist mit dem [ExpectedException]-Attribut gekennzeichnet.

Regelbeschreibung

Bevorzugen Sie Assert.ThrowsException oder Assert.ThrowsExceptionAsync gegenüber [ExpectedException], da so sichergestellt wird, dass nur die erwartete Codezeile die erwartete Ausnahme auslöst, anstatt den gesamten Textkörper des Tests zu verarbeiten. 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.

[TestClass]
public class TestClass
{
    [TestMethod]
    public void TestMethod()
    {
        // Arrange
        var person = new Person
        {
            FirstName = "John", 
            LastName = "Doe",
        };
        person.SetAge(-1);

        // Act
        Assert.ThrowsException(() => 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);
    }
}