Partager via


MSTEST0006 : évitez [ExpectedException]

Propriété Value
Identificateur de la règle MSTEST0006
Titre Évitez [ExpectedException]
Catégorie Concevoir
Le correctif est cassant ou non cassant Sans rupture
Activé par défaut Oui
Gravité par défaut Infos
Introduite dans la version 3.2.0
Il existe une correction de code Oui, à partir de la version 3.7.0

Cause

Une méthode est marquée avec l’attribut [ExpectedException] .

Description de la règle

Préférez Assert.ThrowsException ou Assert.ThrowsExceptionAsync à la place de l’attribut [ExpectedException], car il garantit que seule la ligne de code attendue lève l’exception attendue, au lieu d’agir sur l’ensemble du corps du test. Les API Assert offrent également une plus grande flexibilité et vous permettent d’affirmer des propriétés supplémentaires de l’exception.

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

Comment corriger les violations

Remplacez l’utilisation de l’attribut [ExpectedException] par un appel à Assert.ThrowsException ou Assert.ThrowsExceptionAsync.

[TestClass]
public class TestClass
{
    [TestMethod]
    public void TestMethod()
    {
        // Arrange
        var person = new Person
        {
            FirstName = "John", 
            LastName = "Doe",
        };
        person.SetAge(-1);

        // Act
        Assert.ThrowsException(() => person.GrowOlder());
    }
}

Quand supprimer les avertissements

Il est plus sûr de supprimer ce diagnostic lorsque la méthode ne comprend qu’une simple ligne.

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