Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
| Proprietà | Value |
|---|---|
| ID Regola | MSTEST0051 |
| Titolo | Assert.Throws deve contenere solo una singola istruzione |
| Categoria | Usage |
| La correzione causa un'interruzione o meno | Non causa un'interruzione |
| Abilitato per impostazione predefinita | Yes |
| Gravità predefinita | Informazioni |
| Introdotto nella versione | 3.11.0 |
| È presente una correzione del codice | NO |
Motivo
Una chiamata a Throws, ThrowsAsync, ThrowsExactly, o ThrowsExactlyAsync contiene più istruzioni nel delegato dell'azione.
Descrizione regola
Per assicurarsi che venga testata solo la chiamata al metodo specifica che dovrebbe generare un'eccezione, il delegato dell'azione passato a Assert.Throws, Assert.ThrowsAsyncAssert.ThrowsExactly, o Assert.ThrowsExactlyAsync deve contenere esattamente un'istruzione. L'inclusione di più istruzioni può causare il superamento di test quando l'eccezione viene generata da un'istruzione che non è destinata a generare. Se non è l'ultima istruzione nell'azione che deve essere generata, il test ha codice inattivo. Se si tratta dell'ultima istruzione, l'intento deve essere chiaramente indicato.
Come correggere le violazioni
Effettuare il refactoring del test per assicurarsi che il delegato dell'azione contenga solo la singola istruzione prevista per generare l'eccezione. Spostare qualsiasi codice di configurazione all'esterno della chiamata di asserzione.
Ad esempio, modificare il codice seguente:
[TestMethod]
public void TestMethod()
{
var obj = new MyClass();
Assert.ThrowsExactly<InvalidOperationException>(() =>
{
obj.Initialize();
obj.Execute(); // Only this should be inside the assertion
});
}
In questa:
[TestMethod]
public void TestMethod()
{
var obj = new MyClass();
obj.Initialize();
Assert.ThrowsExactly<InvalidOperationException>(() => obj.Execute());
}
Quando eliminare gli avvisi
Non eliminare gli avvisi da questa regola. L'inclusione di più istruzioni nel delegato dell'azione può rendere poco chiaro quale operazione viene testata e può portare al superamento dei test quando viene violata la finalità originale.