2009-02-13 10 views
18

Como las pruebas unitarias no se utilizan en nuestra empresa, me estoy enseñando a probar mi propio código. Estoy usando el marco de prueba .net estándar para algunas pruebas de unidad realmente básicas.Assert IEnumerables

Un método mío devuelve un IEnumerable<string> y quiero probar su salida. Así que creé un IEnumerable<string> en el que se espera que lo pruebe. Pensé que recordaba que había una forma de Assert.ArePartsEqual o algo así, pero parece que no puedo encontrarlo.

En resumen, ¿cómo puedo probar si dos IEnumerable<string> contienen las mismas cadenas?

+1

+1 por la buena actitud y profesionalismo :) –

+0

He: P Ese es uno de los mejores elogios que un programador junior puede obtener;) –

Respuesta

23

No sé a qué "marco de prueba de .NET estándar" se refiere, pero si es un equipo de Visual Studio Team que prueba cosas, puede usar CollectionAssert.

Su prueba sería así:

CollectionAssert.AreEqual(ExpectedList, ActualList, "..."); 

Actualización: me olvidó CollectionAssert necesita una interfaz ICollection, por lo que tendrá que llamar ActualList.ToList() para que se compile. Devolver el IEnumerable es algo bueno, así que no cambie eso solo para las pruebas.

+0

Que toma una colección, no un IEnumerable ... por lo que también necesitaría insertarlo en una colección ... –

+0

@Marc Gravell, tienes razón ... Lo agregaré a la "respuesta" –

11

desea que el método SequenceEqual() extensión (LINQ):

string[] x = { "abc", "def", "ghi" }; 
    List<string> y = new List<string>() { "abc", "def", "ghi" }; 

    bool isTrue = x.SequenceEqual(y); 

o simplemente:

bool isTrue = x.SequenceEqual(new[] {"abc","def","ghi"}); 

(se devolverá FALSE si son diferentes longitudes, o cualquier artículo es diferente)

+0

Así que para traducirlo a algo para la unidad de prueba podría ir Assert.IsTrue (resultado. SequenceEqual (esperado)); Esto no proporciona un mensaje útil, pero me lleva allí, así que está bien. –

+0

@boris: Sería realmente fácil traducir mi código (actualmente basado en NUnit) a la versión MS. Entonces obtienes un buen mensaje. –

+0

Sí, lo he visto. Actualmente estoy un poco bloqueado en el tiempo para experimentar con las pruebas unitarias, ya que lo estoy haciendo como no solicitado (ver OP). Pero intentaré exprimir algo de eso. –

5

Tengo un ejemplo de esto que utilicé para mi charla "Implementando LINQ to Objects in 60 minutes".

También en mi proyecto MoreLinq. Habiendo tratado de hacerlo aquí, se envuelve horriblemente. Sólo grab from Github ...

+0

Enlace de Google Code roto, aquí hay uno que funciona: https://code.google.com/p/morelinq/source/browse/MoreLinq.Test/TestExtensions.cs – vvnurmi

+0

@vvnurmi: Ah, las alegrías de convertir de svn a hg :) Editaré el enlace. –

+0

Movido a github: https://github.com/morelinq/MoreLINQ/blob/master/MoreLinq.Test/TestExtensions.cs – MKesper

Cuestiones relacionadas