Sdílet prostřednictvím


MSTEST0006: Vyhněte se [ExpectedException]

Vlastnost Hodnota
ID pravidla MSTEST0006
Název Vyhýbat se [ExpectedException]
Kategorie Návrh
Oprava způsobující chybu nebo chybu způsobující chybu Nenarušující
Povoleno ve výchozím nastavení Ano
Výchozí závažnost Informace
Představeno ve verzi 3.2.0
Existuje oprava kódu Ano, od verze 3.7.0

Příčina

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.