Pregunta

Soy nuevo en TDD y xUnit, así que quiero probar mi método que se parece a algo como:

List<T> DeleteElements<T>(this List<T> a, List<T> b);

¿Hay algún método Assert que pueda usar? Creo que algo como esto estaría bien

    List<int> values = new List<int>() { 1, 2, 3 };
    List<int> expected = new List<int>() { 1 };
    List<int> actual = values.DeleteElements(new List<int>() { 2, 3 });

    Assert.Exact(expected, actual);

¿Hay algo como esto?

¿Fue útil?

Solución

xUnit.Net reconoce las colecciones, por lo que solo debes hacerlo

Assert.Equal(expected, actual); // Order is important

Puede ver otras aserciones de colección disponibles en CollectionAsserts.cs

Para NUnit los métodos de comparación de colecciones de biblioteca son

CollectionAssert.AreEqual(IEnumerable, IEnumerable) // For sequences, order matters

y

CollectionAssert.AreEquivalent(IEnumerable, IEnumerable) // For sets, order doesn't matter

Más detalles aquí: CollectionAssert

MbUnit también tiene aserciones de colección similares a NUnit: Assert.Collections.cs

Otros consejos

En la versión actual de XUnit (1.5) solo puedes usar

  

Assert.Equal (esperado, real);

El método anterior hará una comparación elemento por elemento de las dos listas. No estoy seguro de si esto funciona con alguna versión anterior.

Con xUnit, si desea seleccionar propiedades de cada elemento para probar, puede usar Assert.Collection.

Assert.Collection(elements, 
  elem1 => Assert.Equal(expect1, elem1.SomeProperty),
  elem2 => { 
     Assert.Equal(expect2, elem2.SomeProperty);
     Assert.True(elem2.TrueProperty);
  });

Esto prueba el conteo esperado y asegura que cada acción sea verificada.

Recientemente, estuve usando los paquetes xUnit 2.4.0 y Moq 4.10.1 en mi aplicación asp.net core 2.2.

En mi caso, logré que funcionara con un proceso de dos pasos:

  1. Definición de una implementación de IEqualityComparer<T>
  2. Pase la instancia del comparador como tercer parámetro al método Assert.True :

    Assert.True (esperado, real, nuevo MyEqualityComparer ());

Pero hay otra manera mejor de obtener el mismo resultado utilizando el paquete FluentAssertions . Te permite hacer lo siguiente:

// Assert          
expected.Should().BeEquivalentTo(actual));

Es interesante que Assert.Equal () siempre falla, incluso cuando ordené los elementos de dos listas para obtenerlos en el mismo orden.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top