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.
MSTEST0065: Evita
| Propiedad | Value |
|---|---|
| Identificador de la regla | MSTEST0065 |
| Título | Evitar Assert.AreEqual en tipos de colección |
| 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? | Ninguno |
Nota:
Esta regla está disponible a partir de MSTest 4.3.
A partir de MSTest 4.3.3, la regla no notifica los tipos de colección que declaran su propio comportamiento de igualdad.
Causa
Se realiza una llamada a Assert.AreEqual o Assert.AreNotEqual en un valor cuyo tipo estático implementa IEnumerable<T> (distinto de String).
Descripción de la regla
AreEqual y AreNotEqual usan EqualityComparer<T>.Default. Para la mayoría de los tipos de colección (por ejemplo, matrices, List<T>o cualquier tipo definido por el usuario que implemente IEnumerable<T> ), esto recurre a la igualdad de referencia (o a cualquier igualdad que defina el tipo por sí mismo) y no a la comparación de elementos. Como resultado, la aserción casi nunca afirma lo que el autor de prueba pretendía.
[TestClass]
public class TestClass
{
[TestMethod]
public void Test()
{
var expected = new[] { 1, 2, 3 };
var actual = new[] { 1, 2, 3 };
// Violation: this compares references, not contents, and fails.
Assert.AreEqual(expected, actual);
}
}
Cómo corregir infracciones
Elija la aserción que coincida con la intención:
- Se usa
Assert.AreSequenceEqualpara la comparación ordenada por elementos. - Se usa
Assert.AreSequenceEqual(expected, actual, SequenceOrder.InAnyOrder)para la comparación desordenada de elementos. - Se usa
Assert.AreEquivalentpara la comparación estructural profunda.
[TestClass]
public class TestClass
{
[TestMethod]
public void Test()
{
var expected = new[] { 1, 2, 3 };
var actual = new[] { 1, 2, 3 };
Assert.AreSequenceEqual(expected, actual);
}
}
Cuándo suprimir las advertencias
Suprime esta advertencia solo si el tipo define su propio Equals/GetHashCode para comparar contenidos y tú confías intencionadamente en ello.
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 MSTEST0065
// The code that's violating the rule is on this line.
#pragma warning restore MSTEST0065
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.MSTEST0065.severity = none
Para obtener más información, consulte Cómo suprimir advertencias de análisis de código.