Dela via


MSTEST0006: Undvik [ExpectedException]

Property Värde
Regel-ID MSTEST0006
Title Undvika [ExpectedException]
Kategori Designa
Korrigeringen är icke-bakåtkompatibel Icke-icke-bryta
Aktiverad som standard Ja
Standard allvarlighetsgrad Info
Introducerad i version 3.2.0
Finns det en kodkorrigering Ja, från och med 3.7.0

Orsak

En metod markeras med attributet [ExpectedException] .

Regelbeskrivning

Föredrar Assert.ThrowsException eller Assert.ThrowsExceptionAsync (eller Assert.ThrowsExactly/Assert.Throws eller Assert.ThrowsExactlyAsync/Assert.ThrowsAsync om du använder MSTest 3.8 och senare) över attributet [ExpectedException] eftersom det säkerställer att endast den förväntade kodraden genererar det förväntade undantaget, i stället för att agera på hela testtexten. Kontroll-API:erna ger också mer flexibilitet och gör att du kan kontrollera extra egenskaper för undantaget.

[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();
    }
}

Så här åtgärdar du överträdelser

Ersätt användningen av attributet [ExpectedException] med ett anrop till Assert.ThrowsException eller Assert.ThrowsExceptionAsync (eller Assert.ThrowsExactly/Assert.Throws eller Assert.ThrowsExactlyAsync/Assert.ThrowsAsync om du använder MSTest 3.8 och senare).

[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());
    }
}

När du ska ignorera varningar

Det är säkert att utelämna den här diagnostiken när metoden är en enradig.

[TestClass]
public class TestClass
{
    [TestMethod]
    [ExpectedException(typeof(ArgumentNullException))]
    public void TestMethod()
    {
        new Person(null);
    }
}

Undertryck en varning

Om du bara vill förhindra en enda överträdelse lägger du till förprocessordirektiv i källfilen för att inaktivera och aktiverar sedan regeln igen.

#pragma warning disable MSTEST0006
// The code that's violating the rule is on this line.
#pragma warning restore MSTEST0006

Om du vill inaktivera regeln för en fil, mapp eller ett projekt anger du dess allvarlighetsgrad till none i konfigurationsfilen.

[*.{cs,vb}]
dotnet_diagnostic.MSTEST0006.severity = none

Mer information finns i Så här utelämnar du kodanalysvarningar.