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 | Sí |
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.