Condividi tramite


MSTEST0006: Evitare [ExpectedException]

Proprietà valore
ID regola MSTEST0006
Title Evitare [ExpectedException]
Categoria Progettazione
La correzione causa un'interruzione o meno Non causa un'interruzione
Abilitata per impostazione predefinita
Gravità predefinita Info
Introdotto nella versione 3.2.0
È presente una correzione del codice Sì, a partire dalla versione 3.7.0

Causa

Un metodo è contrassegnato con l'attributo [ExpectedException].

Descrizione regola

Preferire Assert.ThrowsException o Assert.ThrowsExceptionAsync (o Assert.ThrowsExactly/Assert.Throws o Assert.ThrowsExactlyAsync/Assert.ThrowsAsync se si usa MSTest 3.8 e versioni successive) sull'attributo [ExpectedException] perché garantisce che solo la riga di codice prevista generi l'eccezione prevista, anziché agire sull'intero corpo del test. Le API assert offrono anche maggiore flessibilità e consentono di asserire proprietà aggiuntive dell'eccezione.

[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();
    }
}

Come correggere le violazioni

Sostituire l'utilizzo dell'attributo [ExpectedException] tramite una chiamata a Assert.ThrowsException o Assert.ThrowsExceptionAsync (o Assert.ThrowsExactly/Assert.Throws o Assert.ThrowsExactlyAsync/Assert.ThrowsAsync se si usa MSTest 3.8 e versioni successive).

[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());
    }
}

Quando eliminare gli avvisi

È sicuro eliminare questa diagnostica quando il metodo di una sola riga.

[TestClass]
public class TestClass
{
    [TestMethod]
    [ExpectedException(typeof(ArgumentNullException))]
    public void TestMethod()
    {
        new Person(null);
    }
}

Eliminare un avviso

Se si vuole eliminare una singola violazione, aggiungere direttive del preprocessore al file di origine per disabilitare e quindi riabilitare la regola.

#pragma warning disable MSTEST0006
// The code that's violating the rule is on this line.
#pragma warning restore MSTEST0006

Per disabilitare la regola per un file, una cartella o un progetto, impostarne la gravità su none nel file di configurazione .

[*.{cs,vb}]
dotnet_diagnostic.MSTEST0006.severity = none

Per altre informazioni, vedere Come eliminare gli avvisi di analisi del codice.