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 | MSTEST0070 |
| Title | [MemberCondition] los argumentos deben ser válidos |
| Category | Usage |
| La corrección es problemática o no problemática | Non-breaking |
| Habilitado de forma predeterminada | Sí |
| Gravedad predeterminada | Advertencia |
| introducido en la versión | 4.3.0 |
| ¿Hay una corrección de código? | No |
Causa
Un [MemberCondition] atributo hace referencia a un miembro que el marco de pruebas no puede evaluar. El miembro al que se hace referencia debe existir en el tipo al que se hace referencia, ser public static, devolver booly (para los métodos) sin parámetros.
Descripción de la regla
El [MemberCondition] atributo ejecuta o omite condicionalmente una clase de prueba o un método de prueba en función del valor de uno o varios miembros estáticos bool . Se hace referencia a cada miembro por el tipo en que se declara y por su nombre, por ejemplo [MemberCondition(typeof(MyConditions), nameof(MyConditions.IsEnabled))].
Dado que se hace referencia al miembro por su nombre, el marco de pruebas lo resuelve a través de la reflexión en tiempo de ejecución. Si el miembro no existe, no es public, no es static, no devuelve bool, requiere parámetros o es una propiedad de solo escritura, al evaluar la condición se produce un InvalidOperationException y la prueba falla. Este analizador detecta esos problemas durante la compilación para que los errores tipográficos y las refactorizaciones no rompan sin avisar la validación basada en pruebas.
La regla notifica una infracción cuando un miembro al que se hace referencia:
- No se encuentra en el tipo al que se hace referencia.
- no es
public. - no es
static. - No es una propiedad, un campo o un método sin parámetros.
- No devuelve
bool. - Es un método que declara parámetros.
- Es una propiedad sin captador.
public class TestConditions
{
public static bool IsEnabled => true;
private static bool IsHidden => true; // not public
public bool IsInstance => true; // not static
public static int Count => 0; // wrong return type
public static bool IsReady(string mode) => true; // has parameters
}
[TestClass]
public class MyTestClass
{
[TestMethod]
[MemberCondition(typeof(TestConditions), "IsEnable")] // Violation - member not found (typo)
public void Test1()
{
}
[TestMethod]
[MemberCondition(typeof(TestConditions), nameof(TestConditions.IsInstance))] // Violation - not static
public void Test2()
{
}
[TestMethod]
[MemberCondition(typeof(TestConditions), nameof(TestConditions.Count))] // Violation - doesn't return bool
public void Test3()
{
}
}
Cómo corregir infracciones
Hacer referencia a un miembro que sea public static, devuelva bool y (para los métodos) no tenga parámetros. Corrija el nombre del miembro si es un error tipográfico o ajuste la declaración de miembro para que cumpla los requisitos.
public class TestConditions
{
public static bool IsEnabled => true;
}
[TestClass]
public class MyTestClass
{
[TestMethod]
[MemberCondition(typeof(TestConditions), nameof(TestConditions.IsEnabled))]
public void Test1()
{
}
}
Use nameof en lugar de un literal de cadena para que el compilador y esta regla mantengan sincronizada la referencia al cambiar el nombre del miembro.
También puede hacer referencia a un campo o un método sin parámetros, combinar varios miembros (son AND combinados) y usar ConditionMode para invertir la condición:
[TestMethod]
[MemberCondition(
typeof(TestConditions),
nameof(TestConditions.IsEnabled),
nameof(TestConditions.IsSupported))] // runs only when both are true
public void Test2()
{
}
[TestMethod]
[MemberCondition(ConditionMode.Exclude, typeof(TestConditions), nameof(TestConditions.IsLegacy))] // skipped when true
public void Test3()
{
}
Cuándo suprimir las advertencias
No suprima las advertencias de esta regla. Un atributo [MemberCondition] que hace referencia a un miembro no válido genera una excepción en tiempo de ejecución y hace que la prueba falle en lugar de evaluar la condición.
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 MSTEST0070
// The code that's violating the rule is on this line.
#pragma warning restore MSTEST0070
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.MSTEST0070.severity = none
Para obtener más información, consulte Cómo suprimir advertencias de análisis de código.