Delen via


MSTEST0006: Vermijden [ExpectedException]

Eigenschappen Weergegeven als
Regel-id MSTEST0006
Titel Vermijden [ExpectedException]
Categorie Ontwerpen
Oplossing is brekend of niet-brekend Niet-brekend
Standaard ingeschakeld Ja
Standaard ernst Info
Geïntroduceerd in versie 3.2.0
Is er een oplossing voor de code Ja, beginnend met 3.7.0

Oorzaak

Een methode wordt gemarkeerd met het [ExpectedException] kenmerk.

Beschrijving van regel

Geef de voorkeur aan Assert.ThrowsException of Assert.ThrowsExceptionAsync (of Assert.ThrowsExactly/Assert.Throws of Assert.ThrowsExactlyAsync/Assert.ThrowsAsync als u MSTest 3.8 en hoger gebruikt) via het kenmerk [ExpectedException], omdat dit ervoor zorgt dat alleen de verwachte coderegel de verwachte uitzondering genereert in plaats van op de hele hoofdtekst van de test te handelen. De assert-API's bieden ook meer flexibiliteit en bieden u de mogelijkheid om extra eigenschappen van de uitzondering te bevestigen.

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

Schendingen oplossen

Vervang het gebruik van het kenmerk [ExpectedException] door een aanroep naar Assert.ThrowsException of Assert.ThrowsExceptionAsync (of Assert.ThrowsExactly/Assert.Throws of Assert.ThrowsExactlyAsync/Assert.ThrowsAsync als u MSTest 3.8 en hoger gebruikt).

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

Wanneer waarschuwingen onderdrukken

Het is veilig om deze diagnose te onderdrukken wanneer de methode een één-liner is.

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

Een waarschuwing onderdrukken

Als u slechts één schending wilt onderdrukken, voegt u preprocessorrichtlijnen toe aan uw bronbestand om de regel uit te schakelen en vervolgens opnieuw in te schakelen.

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

Als u de regel voor een bestand, map of project wilt uitschakelen, stelt u de ernst ervan in op none in het configuratiebestand.

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

Voor meer informatie, zie Hoe codeanalysewaarschuwingen te onderdrukken.