Condividi tramite


MSTEST0051: Assert.Throws deve contenere solo una singola istruzione

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.