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