Comparteix a través de


MSTEST0006: evitar [ExpectedException]

Propiedad Value
Identificador de la regla MSTEST0006
Título Evitar [ExpectedException]
Categoría Diseño
La corrección es problemática o no problemática Poco problemático
Habilitado de forma predeterminada
Gravedad predeterminada Información
Introducido en la versión 3.2.0
Hay una corrección de código Sí, a partir de la versión 3.7.0

Causa

Un método se marca con el atributo [ExpectedException].

Descripción de la regla

Prefiere Assert.ThrowsException o Assert.ThrowsExceptionAsync (o Assert.ThrowsExactly/Assert.Throws o Assert.ThrowsExactlyAsync/Assert.ThrowsAsync si usa MSTest 3.8 y versiones posteriores) sobre el atributo [ExpectedException], ya que garantiza que solo la línea de código que se espera arroje la excepción esperada, en lugar de actuar en todo el cuerpo de la prueba. Las API de aserción también proporcionan más flexibilidad y permiten declarar propiedades adicionales de la excepción.

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

Cómo corregir infracciones

Reemplace el uso del atributo [ExpectedException] por una llamada a Assert.ThrowsException o Assert.ThrowsExceptionAsync (o Assert.ThrowsExactly/Assert.Throws o Assert.ThrowsExactlyAsync/Assert.ThrowsAsync si usa MSTest 3.8 y versiones posteriores).

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

Cuándo suprimir las advertencias

Es seguro suprimir este diagnóstico cuando el método es de una sola línea.

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

Supresión de una advertencia

Si solo quiere suprimir una única infracción, agregue directivas de preprocesador al archivo de origen para deshabilitar y volver a habilitar la regla.

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

Para deshabilitar la regla de un archivo, una carpeta o un proyecto, establezca su gravedad en none del archivo de configuración.

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

Para obtener más información, consulte Procedimiento para suprimir advertencias de análisis de código.