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.
| Fastighet | Värde |
|---|---|
| Regel-ID | MSTEST0051 |
| Titel | Assert.Throws får bara innehålla en enda instruktion |
| Kategori | Usage |
| Korrigeringen är icke-bakåtkompatibel | Icke-icke-bryta |
| Aktiverad som standard | Yes |
| Standard allvarlighetsgrad | Information |
| Introducerad i version | 3.11.0 |
| Finns det en kodkorrigering | Nej |
Orsak
Ett anrop till Throws, ThrowsAsync, ThrowsExactlyeller ThrowsExactlyAsync innehåller flera instruktioner i åtgärdsdelegaten.
Regelbeskrivning
För att säkerställa att endast det specifika metodanrop som förväntas utlösa ett undantag testas, skickas åtgärdsdelegaten till Assert.Throws, Assert.ThrowsAsync, Assert.ThrowsExactlyeller Assert.ThrowsExactlyAsync ska innehålla exakt en instruktion. Att inkludera flera instruktioner kan leda till att tester skickas när undantaget utlöses av en instruktion som inte är avsedd att utlösas. Om det inte är den sista instruktionen i åtgärden som är avsedd att utlösas har testet död kod. Om det är den sista instruktionen bör avsikten anges tydligt.
Så här åtgärdar du överträdelser
Omstrukturera testet för att säkerställa att åtgärdsdelegaten endast innehåller ett uttryck som förväntas utlösa undantaget. Flytta all konfigurationskod utanför assertionsanropet.
Ändra till exempel följande:
[TestMethod]
public void TestMethod()
{
var obj = new MyClass();
Assert.ThrowsExactly<InvalidOperationException>(() =>
{
obj.Initialize();
obj.Execute(); // Only this should be inside the assertion
});
}
Så här gör du:
[TestMethod]
public void TestMethod()
{
var obj = new MyClass();
obj.Initialize();
Assert.ThrowsExactly<InvalidOperationException>(() => obj.Execute());
}
När du ska ignorera varningar
Ignorera inte varningar från den här regeln. Att inkludera flera instruktioner i aktionsdelegaten kan göra det oklart vilken åtgärd som testas och kan leda till att tester går igenom när den ursprungliga avsikten bryts.