Sdílet prostřednictvím


MSTEST0006: Vyhněte se [ExpectedException]

Vlastnost Hodnota
ID pravidla MSTEST0006
Název Se zabránilo [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

Příčina

Metoda je označena atributem [ExpectedException] .

Popis pravidla

Preferujte Assert.ThrowsException nebo Assert.ThrowsExceptionAsync nad atributem [ExpectedException] , protože zajišťuje, že pouze očekávaný řádek kódu vyvolá očekávanou výjimku místo toho, aby se chytá 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.

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

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