MSTEST0079: Uso del atributo ArchitectureCondition en lugar de comprobaciones en tiempo de ejecución

Propiedad Value
Identificador de la regla MSTEST0079
Title Uso del atributo ArchitectureCondition en lugar de comprobaciones en tiempo de ejecución
Category Usage
La corrección es disruptiva o no disruptiva Non-breaking
Habilitado de forma predeterminada Yes
Gravedad predeterminada Información
introducido en la versión 4.4.0 (versión preliminar)
¿Hay una corrección de código? Sí, solo para C#

Causa

La primera instrucción de un método de prueba se ProcessArchitecture compara con un Architecture valor y, a continuación, devuelve las primeras llamadas Assert.Inconclusiveo , en lugar de usar el [ArchitectureCondition] atributo .

Descripción de la regla

Los métodos de prueba que comparan RuntimeInformation.ProcessArchitecture y, a continuación, devuelven o llaman Assert.Inconclusive temprano deben usar el [ArchitectureCondition] atributo en su lugar. El atributo es más declarativo y detectable, y notifica la prueba como omitida en lugar de superada, lo que no es un retorno anticipado.

[TestMethod]
public void TestMethod()
{
    if (RuntimeInformation.ProcessArchitecture != Architecture.X64) return; // Violation
}

El analizador solo reconoce la protección cuando es la primera instrucción del método, sin else rama, y cuando el miembro al que se hace referencia tiene una marca coincidente TestArchitecturesArchitecture.

Cómo corregir infracciones

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

[TestMethod]
[ArchitectureCondition(TestArchitectures.X64)]
public void TestMethod() { }

Una corrección de código de C# reemplaza la protección por el atributo automáticamente. Visual Basic código tiene este diagnóstico, pero no tiene una corrección automática; aplique el atributo a mano.

Cuándo suprimir las advertencias

Puede suprimir esta advertencia si la comprobación en tiempo de ejecución es más compleja que una protección simple de primera instrucción o si necesita lógica condicional que [ArchitectureCondition] no pueda expresarse.

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

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

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

Véase también