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 |
Existe-t-il 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
Privilégiez Assert.ThrowsException
ou Assert.ThrowsExceptionAsync
(ou Assert.ThrowsExactly
/Assert.Throws
ou Assert.ThrowsExactlyAsync
/Assert.ThrowsAsync
si vous utilisez MSTest 3.8 ou une version ultérieure) plutôt que l'attribut [ExpectedException]
car cela garantit que seule la ligne de code attendue lance 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
(ou Assert.ThrowsExactly
/Assert.Throws
ou Assert.ThrowsExactlyAsync
/Assert.ThrowsAsync
si vous utilisez MSTest 3.8 ou une version ultérieure).
[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());
}
}
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);
}
}
Supprimer un avertissement
Si vous voulez supprimer une seule violation, ajoutez des directives de préprocesseur à votre fichier source pour désactiver et réactiver la règle.
#pragma warning disable MSTEST0006
// The code that's violating the rule is on this line.
#pragma warning restore MSTEST0006
Pour désactiver la règle sur un fichier, un dossier ou un projet, définissez sa gravité sur none
dans le fichier de configuration.
[*.{cs,vb}]
dotnet_diagnostic.MSTEST0006.severity = none
Pour plus d’informations, consultez Comment supprimer les avertissements de l’analyse de code.