Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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.
Recommended
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.
- MSTEST0003: los métodos de prueba deben tener un diseño válido.
- MSTEST0043: use el atributo retry en el método de prueba.
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.
- MSTEST0003: los métodos de prueba deben tener un diseño válido.
- MSTEST0043: use el atributo retry en el método de prueba.
Nota:
Las reglas siguientes son completamente opcionales y no están habilitadas en los modos Default, Recommendedni All.
- MSTEST0015: No se debe omitir el método de prueba
- MSTEST0019: Preferir métodos TestInitialize sobre constructores
- MSTEST0020: preferir constructores sobre los métodos TestInitialize
- MSTEST0021: La preferencia de Dispose sobre los métodos TestCleanup
- MSTEST0022: Prefiera TestCleanup en lugar de los métodos Dispose
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:
- MSTEST0007 : uso del atributo en el método de prueba
- MSTEST0014: DataRow debe ser válido
- MSTEST0018 : DynamicData debe ser válido
- MSTEST0042 - DataRow duplicado
- MSTEST0052: evitar dynamicDataSourceType explícito
- MSTEST0062 : evitar los parámetros de los métodos de prueba out/ref
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:
- MSTEST0005 : TestContext debe ser válido
- MSTEST0024: no almacenar static TestContext
- MSTEST0033 : Suprimir la advertencia de referencia no anulable no inicializada
- MSTEST0048: uso de propiedades TestContext
- MSTEST0049 - Flow TestContext CancellationToken
- MSTEST0054 : uso de la propiedad CancellationToken
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