Compartir a través de


MSTEST0061: uso del atributo OSCondition en lugar de comprobaciones en tiempo de ejecución

Propiedad Importancia
Identificador de la regla MSTEST0061
Título Uso del atributo OSCondition en lugar de comprobaciones en tiempo de ejecución
Categoría Usage
La corrección es disruptiva o no disruptiva Non-breaking
Habilitado de forma predeterminada
Gravedad predeterminada Información
introducido en la versión 4.1.0
¿Hay una corrección de código?

Causa

Un método de prueba usa las IsOSPlatform(OSPlatform) comprobaciones con una devolución anticipada en lugar del atributo OSConditionAttribute.

Descripción de la regla

Cuando quiera omitir pruebas basadas en el sistema operativo, use el OSConditionAttribute atributo en lugar de comprobaciones manuales en tiempo de ejecución. El enfoque de atributo proporciona una mejor detectabilidad de pruebas y una intención de prueba más clara y se integra correctamente con marcos de pruebas para marcar las pruebas como omitidas en lugar de superadas.

using System.Runtime.InteropServices;

[TestClass]
public class TestClass
{
    [TestMethod]
    public void TestMethod()
    {
        if (!RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) // Violation
        {
            return;
        }
        
        // Test code that requires Windows
    }
}

Cómo corregir infracciones

Reemplace la comprobación en tiempo de ejecución por el [OSCondition] atributo .

using Microsoft.VisualStudio.TestTools.UnitTesting;

[TestClass]
public class TestClass
{
    [TestMethod]
    [OSCondition(OperatingSystems.Windows)]
    public void TestMethod()
    {
        // Test code that requires Windows
    }
}

El [OSCondition] atributo admite los siguientes sistemas operativos:

  • OperatingSystems.Linux
  • OperatingSystems.OSX (macOS)
  • OperatingSystems.Windows
  • OperatingSystems.FreeBSD

También puede combinar varios sistemas operativos mediante operaciones a nivel de bits OR

[TestMethod]
[OSCondition(OperatingSystems.Windows | OperatingSystems.Linux)]
public void TestMethod()
{
    // Test code that requires Windows or Linux
}

Cuándo suprimir las advertencias

Puede suprimir esta advertencia si la comprobación en tiempo de ejecución es más compleja que un patrón de retorno anticipado simple o si necesita realizar una lógica condicional que no se pueda expresar mediante el [OSCondition] atributo .

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 MSTEST0061
// The code that's violating the rule is on this line.
#pragma warning restore MSTEST0061

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.MSTEST0061.severity = none

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