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 |
czy istnieje poprawka kodu | Tak, począwszy od wersji 3.7.0 |
Przyczyna
Metoda jest oznaczona atrybutem [ExpectedException]
.
Opis reguły
Preferuj Assert.ThrowsException
lub Assert.ThrowsExceptionAsync
(lub Assert.ThrowsExactly
/Assert.Throws
lub Assert.ThrowsExactlyAsync
/Assert.ThrowsAsync
, jeśli używasz MSTest 3.8 i nowszych) zamiast atrybutu [ExpectedException]
, ponieważ zapewnia to, że tylko oczekiwany wiersz kodu zgłasza oczekiwany wyjątek, zamiast wpływać na całą zawartość 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
(lub Assert.ThrowsExactly
/Assert.Throws
lub Assert.ThrowsExactlyAsync
/Assert.ThrowsAsync
, jeśli używasz biblioteki MSTest 3.8 lub nowszej).
[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());
}
}
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);
}
}
Pomijanie ostrzeżenia
Jeśli chcesz po prostu pominąć pojedyncze naruszenie, dodaj dyrektywy preprocesora do pliku źródłowego, aby wyłączyć, a następnie ponownie włączyć regułę.
#pragma warning disable MSTEST0006
// The code that's violating the rule is on this line.
#pragma warning restore MSTEST0006
Aby wyłączyć regułę dla pliku, folderu lub projektu, ustaw jego ważność na none
w pliku konfiguracji .
[*.{cs,vb}]
dotnet_diagnostic.MSTEST0006.severity = none
Aby uzyskać więcej informacji, zobacz Jak pominąć ostrzeżenia analizy kodu.