Udostępnij za pośrednictwem


MSTEST0006: Unikaj [ExpectedException]

Właściwości Wartość
Identyfikator reguły MSTEST0006
Tytuł Unikać [ExpectedException]
Kategoria Projektowanie
Poprawka powodująca niezgodność lub niezgodność Niezgodność
Domyślnie włączone Tak
Ważność domyślna Informacje
Wprowadzone w wersji 3.2.0
Istnieje poprawka kodu Nie.

Przyczyna

Metoda jest oznaczona atrybutem [ExpectedException] .

Opis reguły

Preferuj Assert.ThrowsException [ExpectedException] lub Assert.ThrowsExceptionAsync ponad atrybut, ponieważ gwarantuje, że tylko oczekiwany wiersz kodu zgłasza oczekiwany wyjątek, zamiast działać na całej treści testu. Interfejsy API asercji zapewniają również większą elastyczność i umożliwiają uzyskanie dodatkowych właściwości wyjątku.

[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 naprawić naruszenia

Zastąp użycie atrybutu [ExpectedException] wywołaniem metody Assert.ThrowsException lub 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());
    }
}

Kiedy pomijać ostrzeżenia

Można bezpiecznie pominąć tę diagnostykę, gdy metoda jest jedną liniową.

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