Compartir vía


Análisis de código de MSTest

Las reglas de análisis de MSTest ("MSTESTxxxx") inspeccionan el código de C# o Visual Basic para detectar problemas de seguridad, rendimiento, diseño y otros.

Sugerencia

Si usa Visual Studio, muchas reglas de analizador tienen correcciones de código asociadas que puede aplicar para corregir el problema. Las correcciones de código se muestran en el menú del icono de bombilla.

Las reglas se organizan en categorías como el uso del rendimiento...

A partir de MSTest.TestFramework 3.7, el paquete NuGet MSTest.Analyzers es una dependencia del marco. Para versiones anteriores, debe utilizar el metapaquete MSTest o agregar una referencia de paquete para MSTest.Analyzers explícitamente.

MSTestAnalysisMode

A partir de MSTest 3.8, hay disponible una propiedad de MSBuild denominada MSTestAnalysisMode para determinar qué analizadores están habilitados en qué gravedad.

Sugerencia

Para ver qué reglas están habilitadas en qué gravedad para cada modo, puede ir al paquete de la versión de interés en la caché de NuGet, buscar el directorio globalconfigs y abrir el archivo .globalconfig correspondiente al modo de análisis. Para obtener más información sobre cómo buscar el directorio de caché de NuGet, consulte Administración de paquetes globales, caché y carpetas temporales. En ese directorio, busque el directorio mstest.analyzers, luego la versión (3.8 y versiones posteriores), y después globalconfigs. Como alternativa, puede descargar el paquete NuGet de la versión de interés desde nuget.org y verlo en el Explorador de paquetes NuGet (aplicación de Windows) o ver directamente en la versión de la aplicación web del Explorador de paquetes NuGet.

Los valores disponibles para esta propiedad:

None

Este valor establece todos los analizadores con gravedad none, lo que deshabilita todos ellos. Después, puede habilitar analizadores individuales mediante archivos .editorconfig o .globalconfig.

Default

Esta configuración sigue el comportamiento documentado predeterminado para cada regla.

  • Las reglas habilitadas de forma predeterminada usarán su gravedad predeterminada.
  • Las reglas que están deshabilitadas de forma predeterminada tendrán una severidad de none.

Nota:

Las reglas que están habilitadas de forma predeterminada como advertencias son infracciones que se espera que causen problemas en tiempo de ejecución.

Este es el modo que se espera que usen la mayoría de los desarrolladores. Las reglas habilitadas predeterminadamente con gravedad Info (suggestion) se escalan a advertencias. Las reglas siguientes se escalan a errores en ambos modos Recommended y All.

All

Este modo es más agresivo que Recommended. Todas las reglas están habilitadas como advertencias. Además, las reglas siguientes se consideran errores.

Reglas por categoría

Las reglas del analizador se organizan en las siguientes categorías:

Reglas de diseño

Las reglas de diseño le ayudan a crear y mantener conjuntos de pruebas que se adhieren al diseño adecuado y a los procedimientos recomendados.

Reglas de rendimiento

Las reglas de rendimiento admiten pruebas de alto rendimiento.

Reglas de supresión

Las reglas de supresión admiten la supresión de diagnósticos de otras reglas.

Reglas de uso

Las reglas de uso admiten el uso adecuado de MSTest.

Reglas por concepto

Busque reglas organizadas por escenarios y conceptos de prueba comunes:

Estructura y atributos de prueba

Reglas que ayudan a garantizar que las clases y métodos de prueba estén correctamente estructuradas y decoradas:

  • MSTEST0002 : la clase test debe ser válida
  • MSTEST0003 : el método test debe ser válido
  • MSTEST0004 - Los tipos públicos deben ser clases de prueba
  • MSTEST0007 : uso del atributo en el método de prueba
  • MSTEST0016 : la clase de prueba debe tener un método de prueba
  • MSTEST0029 : el método público debe ser método de prueba
  • MSTEST0030 : el tipo que contiene el método de prueba debe ser una clase de prueba.
  • MSTEST0036: no usar sombreamiento
  • MSTEST0041 : uso de atributos basados en condiciones con la clase de prueba
  • MSTEST0044: preferir TestMethod sobre DataTestMethod
  • MSTEST0056 : TestMethodAttribute debe establecer DisplayName correctamente
  • MSTEST0057 : TestMethodAttribute debe propagar la información de origen
  • MSTEST0060 : TestMethodAttribute duplicado
  • MSTEST0063 : la clase de prueba debe tener un constructor válido

Documentación relacionada: Escritura de pruebas con MSTest, Atributos

Patrones asincrónicos y await

Reglas para escribir código de prueba asincrónico correctamente:

  • MSTEST0013 : AssemblyCleanup debe ser válido (incluye reglas asincrónicas)
  • MSTEST0027 : supresión del sufijo asincrónico para los métodos de prueba
  • MSTEST0028 : supresión del sufijo asincrónico para los métodos de accesorio de prueba
  • MSTEST0039 : usar métodos Assert.Throws más recientes (variantes asincrónicas)
  • MSTEST0040 : evitar el uso de aserciones en contexto de void asincrónico
  • MSTEST0045 - Usar la cancelación cooperativa para el tiempo de espera
  • MSTEST0049 - Flow TestContext CancellationToken
  • MSTEST0054 : uso de la propiedad CancellationToken

Documentación relacionada: TestContext

Pruebas controladas por datos

Reglas para trabajar con escenarios de prueba controlados por datos:

Documentación relacionada: Atributos usados para pruebas controladas por datos

Ciclo de vida e inicialización

Reglas para la inicialización, limpieza y administración del ciclo de vida de las pruebas:

  • MSTEST0008 : TestInitialize debe ser válido
  • MSTEST0009: TestCleanup debe ser válido
  • MSTEST0010 : ClassInitialize debe ser válido
  • MSTEST0011 : ClassCleanup debe ser válido
  • MSTEST0012 : AssemblyInitialize debe ser válido
  • MSTEST0013 : AssemblyCleanup debe ser válido
  • MSTEST0019 - Preferir TestInitialize en lugar de constructores
  • MSTEST0020 : se prefieren constructores sobre TestInitialize
  • MSTEST0021 - Preferir Dispose en lugar de TestCleanup
  • MSTEST0022 : preferir TestCleanup sobre Dispose
  • MSTEST0034 : usar ClassCleanupBehavior.EndOfClass
  • MSTEST0050: La configuración de prueba global debe ser válida

Documentación relacionada: Ciclo de vida

Assertions

Reglas para usar métodos de aserción correctamente y de forma eficaz:

  • MSTEST0006 : evitar el atributo ExpectedException
  • MSTEST0014: DataRow debe ser válido
  • MSTEST0017 : los argumentos de aserción deben pasarse en orden correcto
  • MSTEST0023: no negar la aserción booleana
  • MSTEST0025: Preferir Assert.Fail en lugar de condiciones que siempre sean falsas.
  • MSTEST0026 : los argumentos de aserción deben evitar el acceso condicional
  • MSTEST0032 - Revisar la condición de aserción siempre verdadera
  • MSTEST0037 : uso de métodos de aserción adecuados
  • MSTEST0038 - evitar usar Assert.AreSame con tipos de valor
  • MSTEST0039 : uso de métodos Assert.Throws más recientes
  • MSTEST0046 : usar Assert en lugar de StringAssert
  • MSTEST0051 : Assert.Throws debe contener una sola instrucción
  • MSTEST0053 - evitar parámetros de formato de Assert
  • MSTEST0058: evitar las aserciones en bloques catch

Documentación relacionada: Aserciones

TestContext

Reglas para usar correctamente el objeto TestContext:

Documentación relacionada: TestContext

Configuración de prueba

Reglas para configurar la ejecución de pruebas, la paralelización y otras opciones de prueba:

  • MSTEST0001 : uso del atributo Parallelize
  • MSTEST0015 : no se debe omitir el método test
  • MSTEST0031 : no usar System.ComponentModel.DescriptionAttribute
  • MSTEST0035 : uso de DeploymentItem con método de prueba o clase de prueba
  • MSTEST0043 : uso del atributo retry en el método de prueba
  • MSTEST0045 - Usar la cancelación cooperativa para el tiempo de espera
  • MSTEST0055 : no omitir el valor devuelto del método de cadena
  • MSTEST0059 : uso del atributo Parallelize correctamente
  • MSTEST0061 : uso del atributo OSCondition en lugar de la comprobación en tiempo de ejecución

Documentación relacionada: Configuración de MSTest, Ejecución de pruebas

Todas las reglas (referencia rápida)

Identificador de la regla Categoría Title Gravedad predeterminada
MSTEST0001 Performance Uso del atributo Parallelize Información
MSTEST0002 Usage La clase de prueba debe ser válida Advertencia
MSTEST0003 Usage El método de prueba debe ser válido Advertencia → Error
MSTEST0004 Design Los tipos públicos deben ser clases de prueba Información
MSTEST0005 Usage TestContext debe ser válido Advertencia
MSTEST0006 Design Evitar el atributo ExpectedException Información
MSTEST0007 Usage Uso del atributo en el método de prueba Advertencia
MSTEST0008 Usage TestInitialize debe ser válido Advertencia
MSTEST0009 Usage TestCleanup debe ser válido Advertencia
MSTEST0010 Usage ClassInitialize debe ser válido Advertencia
MSTEST0011 Usage ClassCleanup debe ser válido Advertencia
MSTEST0012 Usage AssemblyInitialize debe ser válido Advertencia
MSTEST0013 Usage AssemblyCleanup debería ser válido Advertencia
MSTEST0014 Usage DataRow debe ser válido Advertencia
MSTEST0015 Design No se debe omitir el método de prueba Ninguno (opcional)
MSTEST0016 Design La clase de prueba debe tener un método de prueba. Información
MSTEST0017 Usage Los argumentos de aserción deben pasarse en orden correcto Información
MSTEST0018 Usage DynamicData debe ser válido Advertencia
MSTEST0019 Design Preferir TestInitialize en lugar de constructores Ninguno (opcional)
MSTEST0020 Design Preferir constructores sobre TestInitialize Ninguno (opcional)
MSTEST0021 Design Prefiere Dispose en lugar de TestCleanup Ninguno (opcional)
MSTEST0022 Design Se recomienda preferir TestCleanup en lugar de Dispose Ninguno (opcional)
MSTEST0023 Usage No negar la aserción booleana Información
MSTEST0024 Usage No almacenar static TestContext Advertencia
MSTEST0025 Design Preferir Assert.Fail en lugar de condiciones siempre falsas. Información
MSTEST0026 Usage Los argumentos de aserción deben evitar el acceso condicional Información
MSTEST0027 Suppression Supresión del sufijo asincrónico para los métodos de prueba N/A
MSTEST0028 Suppression Eliminar el sufijo asíncrono para los métodos de configuración de prueba N/A
MSTEST0029 Design El método público debe ser el método de prueba Información
MSTEST0030 Usage El tipo que contiene el método de prueba debe ser una clase de prueba. Advertencia
MSTEST0031 Usage No use el atributo System.ComponentModel.DescriptionAttribute Información
MSTEST0032 Usage Revisión de la condición de aserción siempre verdadera Información
MSTEST0033 Suppression Suprimir referencia no nula no inicializada N/A
MSTEST0034 Usage Usar el comportamiento ClassCleanupBehavior.EndOfClass Información
MSTEST0035 Usage Uso de DeploymentItem con método de prueba o clase de prueba Información
MSTEST0036 Design No usar sombras Advertencia
MSTEST0037 Usage Uso de métodos de aserción adecuados Información
MSTEST0038 Usage Evitar Assert.AreSame con tipos de valor Información
MSTEST0039 Usage Uso de métodos Assert.Throws más recientes Información
MSTEST0040 Usage Evitar el uso de aserciones en contextos asincrónicos de tipo void. Advertencia
MSTEST0041 Usage Uso de atributos basados en condiciones con la clase de prueba Advertencia
MSTEST0042 Usage DataRow duplicado Advertencia
MSTEST0043 Usage Uso del atributo retry en el método de prueba Advertencia → Error
MSTEST0044 Design Prefiera usar TestMethod en lugar de DataTestMethod Información
MSTEST0045 Design Uso de la cancelación cooperativa para el tiempo de espera Información
MSTEST0046 Usage Usar Assert en lugar de StringAssert Información
MSTEST0048 Usage Uso de propiedades TestContext Advertencia
MSTEST0049 Usage Flow TestContext CancellationToken Información
MSTEST0050 Usage El accesorio de prueba global debe ser válido Advertencia
MSTEST0051 Usage Assert.Throws debe contener una sola instrucción Información
MSTEST0052 Usage Evitar el uso explícito de DynamicDataSourceType Información
MSTEST0053 Usage No utilizar parámetros de formato en Assert Información
MSTEST0054 Usage Usar la propiedad CancellationToken Información
MSTEST0055 Usage No ignores el valor devuelto del método de cadena Advertencia
MSTEST0056 Usage TestMethodAttribute debe establecer DisplayName correctamente Información
MSTEST0057 Usage TestMethodAttribute debe propagar la información de origen Advertencia
MSTEST0058 Usage Evite aserciones en bloques 'catch' Información
MSTEST0059 Usage Uso del atributo Parallelize correctamente Advertencia
MSTEST0060 Usage TestMethodAttribute duplicado Advertencia
MSTEST0061 Usage Uso del atributo OSCondition en lugar de la comprobación en tiempo de ejecución Información
MSTEST0062 Usage Evitar parámetros de método de prueba out/ref Advertencia
MSTEST0063 Usage La clase test debe tener un constructor válido Advertencia

* Escalado a Error en los modos Recommended y All.

MSTESTEXP

Varias API de MSTest están representadas con el ExperimentalAttribute. Este atributo indica que la API es experimental y se puede quitar o cambiar en versiones futuras de MSTest. El atributo se usa para identificar las API que aún no son estables y es posible que no sean adecuadas para su uso en producción.

El diagnóstico de MSTESTEXP le avisa para usar una API experimental en el código. Para suprimir este diagnóstico con SuppressMessageAttribute, agregue el código siguiente al proyecto:

using System.Diagnostics.CodeAnalysis;

[assembly: SuppressMessage("MSTESTEXP", "Justification")]

Como alternativa, puede suprimir este diagnóstico con la directiva de preprocesador agregando el código siguiente al proyecto:

#pragma warning disable MSTESTEXP
        // API that is causing the warning.
#pragma warning restore MSTESTEXP