MSTEST0006: Undvik [ExpectedException]
Property | Värde |
---|---|
Regel-ID | MSTEST0006 |
Title | Undvika [ExpectedException] |
Kategori | Designa |
Korrigeringen är icke-bakåtkompatibel | Icke-icke-bryta |
Aktiverad som standard | Ja |
Standard allvarlighetsgrad | Info |
Introducerad i version | 3.2.0 |
Finns det en kodkorrigering | Ja, från och med 3.7.0 |
Orsak
En metod markeras med attributet [ExpectedException]
.
Regelbeskrivning
Föredrar Assert.ThrowsException
eller Assert.ThrowsExceptionAsync
(eller Assert.ThrowsExactly
/Assert.Throws
eller Assert.ThrowsExactlyAsync
/Assert.ThrowsAsync
om du använder MSTest 3.8 och senare) över attributet [ExpectedException]
eftersom det säkerställer att endast den förväntade kodraden genererar det förväntade undantaget, i stället för att agera på hela testtexten. Kontroll-API:erna ger också mer flexibilitet och gör att du kan kontrollera extra egenskaper för undantaget.
[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();
}
}
Så här åtgärdar du överträdelser
Ersätt användningen av attributet [ExpectedException]
med ett anrop till Assert.ThrowsException
eller Assert.ThrowsExceptionAsync
(eller Assert.ThrowsExactly
/Assert.Throws
eller Assert.ThrowsExactlyAsync
/Assert.ThrowsAsync
om du använder MSTest 3.8 och senare).
[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());
}
}
När du ska ignorera varningar
Det är säkert att utelämna den här diagnostiken när metoden är en enradig.
[TestClass]
public class TestClass
{
[TestMethod]
[ExpectedException(typeof(ArgumentNullException))]
public void TestMethod()
{
new Person(null);
}
}
Undertryck en varning
Om du bara vill förhindra en enda överträdelse lägger du till förprocessordirektiv i källfilen för att inaktivera och aktiverar sedan regeln igen.
#pragma warning disable MSTEST0006
// The code that's violating the rule is on this line.
#pragma warning restore MSTEST0006
Om du vill inaktivera regeln för en fil, mapp eller ett projekt anger du dess allvarlighetsgrad till none
i konfigurationsfilen.
[*.{cs,vb}]
dotnet_diagnostic.MSTEST0006.severity = none
Mer information finns i Så här utelämnar du kodanalysvarningar.