Sdílet prostřednictvím


MSTEST0006: Vyhněte se [ExpectedException]

Property Value
Identifikátor pravidla MSTEST0006
Title Vyhýbat se [ExpectedException]
Category Design
Oprava způsobující chybu nebo chybu způsobující chybu Non-breaking
Povoleno ve výchozím nastavení Yes
Výchozí úroveň závažnosti Upozornění od verze 3.10, informace před tím
Představeno ve verzi 3.2.0
Existuje oprava kódu Ano, od verze 3.7.0

Poznámka:

Tento analyzátor již není relevantní pro MSTest 4, protože byl atribut odebrán.

Cause

Metoda je označena atributem [ExpectedException] .

Popis pravidla

Upřednostňujte Assert.ThrowsException nebo Assert.ThrowsExceptionAsync (nebo Assert.ThrowsExactly/Assert.Throws nebo Assert.ThrowsExactlyAsync/Assert.ThrowsAsync, pokud používáte MSTest 3.8 a novější) než atribut [ExpectedException], protože zajišťuje, že pouze očekávaný řádek kódu vyvolá očekávanou výjimku, a ne na celý text testu. Rozhraní API assert také poskytují větší flexibilitu a umožňují uplatnit další vlastnosti výjimky.

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

Jak opravit porušení

Nahraďte použití atributu [ExpectedException] voláním Assert.ThrowsException nebo Assert.ThrowsExceptionAsync (nebo Assert.ThrowsExactly/Assert.Throws nebo Assert.ThrowsExactlyAsync/Assert.ThrowsAsync, pokud používáte MSTest 3.8 a novější).

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

Kdy potlačit upozornění

Tuto diagnostiku je bezpečné potlačit, když je metoda jednoslůžkovou vložkou.

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

Potlačte upozornění

Pokud chcete pouze potlačit jedno porušení, přidejte do zdrojového souboru direktivy preprocesoru, abyste pravidlo zakázali a znovu povolili.

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

Chcete-li pravidlo pro soubor, složku nebo projekt zakázat, nastavte jeho závažnost na none v konfiguračním souboru .

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

Další informace naleznete v tématu Jak potlačit upozornění analýzy kódu.