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);
}
}
Współpracuj z nami w serwisie GitHub
Źródło tej zawartości można znaleźć w witrynie GitHub, gdzie można również tworzyć i przeglądać problemy i żądania ściągnięcia. Więcej informacji znajdziesz w naszym przewodniku dla współtwórców.