Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
MSTEST0006: Undvik
| Property | Value |
|---|---|
| Regel-ID | MSTEST0006 |
| Title | Undvika [ExpectedException] |
| Category | Design |
| Korrigeringen är icke-bakåtkompatibel | Non-breaking |
| Aktiverad som standard | Yes |
| Standard allvarlighetsgrad | Varning från och med 3.10, Info före |
| Introducerad i version | 3.2.0 |
| Finns det en kodkorrigering | Ja, från och med 3.7.0 |
[OBS] Den här analysatorn är inte längre relevant för MSTest 4 eftersom attributet har tagits bort.
Cause
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.