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.
| Propiedad | Value |
|---|---|
| Identificador de la regla | MSTEST0081 |
| Title | '[TestFilterProvider]' debe hacer referencia a un tipo de filtro de prueba válido |
| Category | Usage |
| La corrección es disruptiva o no disruptiva | Non-breaking |
| Habilitado de forma predeterminada | Yes |
| Gravedad predeterminada | Warning |
| introducido en la versión | 4.4.0 (versión preliminar) |
| ¿Hay una corrección de código? | No |
Importante
Este analizador está planeado para MSTest 4.4 y solo está disponible en compilaciones en versión preliminar hasta que se publique MSTest 4.4.0.
Causa
[assembly: TestFilterProvider(typeof(MyFilter))] hace referencia a un tipo que no cumple los requisitos que aplica el adaptador en tiempo de ejecución o el ensamblado registra más de un proveedor de filtros de prueba.
Descripción de la regla
[assembly: TestFilterProvider(typeof(MyFilter))] pasa el tipo de filtro como , Typepor lo que el compilador acepta cualquier tipo en absoluto. El adaptador valida el tipo solo cuando materializa el filtro y, a continuación, produce un error en toda la ejecución. Este analizador informa de los mismos problemas en tiempo de compilación, donde son baratos de corregir. El tipo al que se hace referencia debe:
- Ser no genérico.
- Se puede crear instancias, por lo que no puede ser abstracta, estática, una interfaz o un tipo similar a byref.
- Implemente
ITestFilter. - Declare un constructor público sin parámetros (cada estructura ya satisface esto).
Como máximo, se puede registrar un proveedor de filtros de prueba por ensamblado de prueba y también se produce un error al pasar un tipo de filtro explícito null . Cuando el destino .NET, el formulario genérico [assembly: TestFilterProvider<MyFilter>] aplica los requisitos de interfaz y constructor a través de restricciones genéricas en su lugar, por lo que solo se aplican las comprobaciones de tipo genérico y "como máximo un proveedor".
[assembly: TestFilterProvider(typeof(MyFilter))]
public sealed class MyFilter : ITestFilter
{
public MyFilter(string mode) { } // Violation: no public parameterless constructor
public TestFilterResult Filter(TestFilterContext context) => TestFilterResult.Run;
}
Cómo corregir infracciones
Agregue un constructor público sin parámetros o, de lo contrario, ajuste el tipo para que no sea genérico, instantiable, implemente y tenga un constructor público sin parámetros ITestFilter.
public sealed class MyFilter : ITestFilter
{
public TestFilterResult Filter(TestFilterContext context) => TestFilterResult.Run;
}
Cuándo suprimir las advertencias
No omitas las advertencias de esta regla. Una infracción produce un error en toda la ejecución de pruebas en tiempo de ejecución en lugar de solo el propio filtro.
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 MSTEST0081
// The code that's violating the rule is on this line.
#pragma warning restore MSTEST0081
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.MSTEST0081.severity = none
Para obtener más información, consulte Cómo suprimir advertencias de análisis de código.