MSTEST0006: Vermijden [ExpectedException]
Eigenschappen | Weergegeven als |
---|---|
Regel-id | MSTEST0006 |
Titel | Vermijden [ExpectedException] |
Categorie | Ontwerpen |
Oplossing is brekend of niet-brekend | Niet-brekend |
Standaard ingeschakeld | Ja |
Standaard ernst | Info |
Geïntroduceerd in versie | 3.2.0 |
Is er een oplossing voor de code | Ja, beginnend met 3.7.0 |
Oorzaak
Een methode wordt gemarkeerd met het [ExpectedException]
kenmerk.
Beschrijving van regel
Geef de voorkeur aan Assert.ThrowsException
of Assert.ThrowsExceptionAsync
(of Assert.ThrowsExactly
/Assert.Throws
of Assert.ThrowsExactlyAsync
/Assert.ThrowsAsync
als u MSTest 3.8 en hoger gebruikt) via het kenmerk [ExpectedException]
, omdat dit ervoor zorgt dat alleen de verwachte coderegel de verwachte uitzondering genereert in plaats van op de hele hoofdtekst van de test te handelen. De assert-API's bieden ook meer flexibiliteit en bieden u de mogelijkheid om extra eigenschappen van de uitzondering te bevestigen.
[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();
}
}
Schendingen oplossen
Vervang het gebruik van het kenmerk [ExpectedException]
door een aanroep naar Assert.ThrowsException
of Assert.ThrowsExceptionAsync
(of Assert.ThrowsExactly
/Assert.Throws
of Assert.ThrowsExactlyAsync
/Assert.ThrowsAsync
als u MSTest 3.8 en hoger gebruikt).
[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());
}
}
Wanneer waarschuwingen onderdrukken
Het is veilig om deze diagnose te onderdrukken wanneer de methode een één-liner is.
[TestClass]
public class TestClass
{
[TestMethod]
[ExpectedException(typeof(ArgumentNullException))]
public void TestMethod()
{
new Person(null);
}
}
Een waarschuwing onderdrukken
Als u slechts één schending wilt onderdrukken, voegt u preprocessorrichtlijnen toe aan uw bronbestand om de regel uit te schakelen en vervolgens opnieuw in te schakelen.
#pragma warning disable MSTEST0006
// The code that's violating the rule is on this line.
#pragma warning restore MSTEST0006
Als u de regel voor een bestand, map of project wilt uitschakelen, stelt u de ernst ervan in op none
in het configuratiebestand.
[*.{cs,vb}]
dotnet_diagnostic.MSTEST0006.severity = none
Voor meer informatie, zie Hoe codeanalysewaarschuwingen te onderdrukken.