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.