Nota
O acceso a esta páxina require autorización. Pode tentar iniciar sesión ou modificar os directorios.
O acceso a esta páxina require autorización. Pode tentar modificar os directorios.
MSTEST0058: Evite afirmaciones en los bloques de
| Propiedad | Importancia |
|---|---|
| Identificador de la regla | MSTEST0058 |
| Título | Evitar aserciones en bloques catch |
| Categoría | Usage |
| La corrección es disruptiva o no disruptiva | Non-breaking |
| Habilitado de forma predeterminada | Sí |
| Gravedad predeterminada | Información |
| introducido en la versión | 4.1.0 |
| ¿Hay una corrección de código? | No |
Causa
Un método de prueba contiene instrucciones de aserción dentro de un catch bloque.
Descripción de la regla
La colocación de aserciones en catch bloques es un antipatrón que puede dar lugar a resultados de pruebas confusos y hace que las pruebas sea más difícil de entender. Cuando se produce una excepción, se ejecuta el catch bloque y se ejecuta la aserción. Sin embargo, si no se produce ninguna excepción, el catch bloque nunca se ejecuta, lo que podría dar la confianza falsa de que se ha superado la prueba.
En su lugar, use Assert.Throws o métodos similares para comprobar que se lanzan excepciones esperadas. Esto hace que la intención de prueba sea más clara y garantice un comportamiento de prueba adecuado.
[TestClass]
public class TestClass
{
[TestMethod]
public void TestMethod()
{
try
{
// Code that might throw.
DoSomethingThatMightThrow();
}
catch (Exception ex)
{
Assert.AreEqual("Expected error message", ex.Message); // Violation
}
}
}
Cómo corregir infracciones
Utiliza Assert.Throws, Assert.ThrowsExactly o métodos de aserción relacionados para probar las excepciones.
[TestClass]
public class TestClass
{
[TestMethod]
public void TestMethod_ThrowsExceptionWithExpectedMessage()
{
InvalidOperationException exception = Assert.Throws<InvalidOperationException>(() => DoSomethingThatMightThrow());
Assert.AreEqual("Expected error message", exception.Message);
}
}
Cuándo suprimir las advertencias
Puede suprimir esta advertencia si tiene una necesidad legítima de detectar una excepción y realizar una validación compleja que no se pueda expresar fácilmente mediante métodos de aserción estándar. Sin embargo, considere la posibilidad de refactorizar la prueba para usar primero aserciones de excepciones más explícitas.
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 MSTEST0058
// The code that's violating the rule is on this line.
#pragma warning restore MSTEST0058
Para deshabilitar la regla de un archivo, una carpeta o un proyecto, establezca su gravedad a none en el archivo de configuración.
[*.{cs,vb}]
dotnet_diagnostic.MSTEST0058.severity = none
Para obtener más información, consulte Cómo suprimir advertencias de análisis de código.