2009-01-07 20 views
50

Hola soy nuevo en TDD y xUnit así que quiero probar mi método que es algo así como:xUnidad: ¿Afirmar dos listas <T> son iguales?

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

por supuesto que no es el verdadero método :) ¿Hay algún método Assert que puedo usar? Creo que algo así sería bueno

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?

Respuesta

59

xUnit.Net reconoce colecciones por lo que sólo necesita hacer

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

Se puede ver otras afirmaciones de recogida disponibles en CollectionAsserts.cs

Para NUnit biblioteca métodos de comparación de recolección 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 afirmaciones colección similar a NUnit: Assert.Collections.cs

+1

El enlace del código fuente ha cambiado para http://xunit.codeplex.com/SourceControl/changeset/view/d947e347c5c3#Samples%2fAssertExamples%2fCollectionExample.cs –

+1

Nuevo enlace en los comentarios también. –

+1

El proyecto ahora se movió a GitHub, pero tampoco he podido encontrar ese archivo fuente en particular. – MEMark

27

En la versión actual de XUnit (1.5) sólo se puede utilizar

Assert.Equal (esperado, actual);

El método anterior hará un elemento por comparación de elementos de las dos listas. No estoy seguro de si esto funciona para cualquier versión anterior.

+4

El problema que encontré con Assert.Equal for collections es que falla si los elementos de las colecciones están en diferentes órdenes, incluso si los elementos están presentes en ambos. –

+1

@ ScottA.Lawrence ¡Las listas también tienen orden! ¿Obtienes el mismo comportamiento con HashSets? – johv

+0

@johv No lo he probado con HashSets, pero es una buena idea. Una vez que haya tenido la oportunidad de probarlo trataré de recordar para responder aquí. –

6

Con xUnit, si desea seleccionar las 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 recuento esperado y garantiza que se verifique cada acción.

Cuestiones relacionadas