2009-11-24 4 views
11

Algunos de los métodos de Assert NUnit están sobrecargados para usar ICollection pero no ICollection<T> y por lo tanto no puede usarlos.Por qué o cómo usar los métodos de NUnit con ICollection <T>

¿Hay alguna forma de esto? Diablos, ¿estoy haciendo algo estúpido?

Tengo que volver a usar Assert.AreEqual en lugar de métodos especializados y está haciendo que mis pruebas sean feas.

¿Algún consejo?

Editar:

Gracias por las respuestas. El método That de NUnit parece interesante, así que lo examinaré más adelante.

La marca ha mencionado esto correctamente, pero NUnit Collection Asserts son excelentes. Recientemente los utilicé en algunas pruebas nuevas y las encontré excelentes para trabajar.

+0

Debo mencionar, en mi clase estoy probando. Cambiar el tipo de retorno del método a la Lista en lugar de IList resuelve este problema, pero a su vez estoy exponiendo la Lista que no quiero por razones muy debatidas en SO, etc. – Finglas

+0

No debería haber daño al usar linq para convertir su colección en una lista, siempre y cuando no esté afirmando algo que no esté presente en la colección. Afirmar que el método ForEach funciona, por ejemplo, sería una mala forma. –

Respuesta

8

ICollection y ICollection<T> son contratos diferentes, uno no hereda el otro.

http://msdn.microsoft.com/en-us/library/system.collections.icollection_members.aspx http://msdn.microsoft.com/en-us/library/y2fx0ty0.aspx

Si usted tiene una colección genérica puede llamar ToList() en él y obtener un List<T>, que pasa a poner en práctica el no genérico ICollection también. Luego use esa lista en el método NUnit Assert.

+0

Smashing. Linq salvó el día (una vez más). Saludos, no pensé en esto. – Finglas

+1

Puede que Linq no esté salvando el día, simplemente le dará un recuerdo color de rosa que lo llevará a la decepción más adelante. –

+0

Bueno, me dio ToList(), estoy contento. – Finglas

7

Hay un conjunto de CollectionAsserts, o usted podría heredar su prueba de AssertHelper y utilizar una sintaxis como

Expect(actual, Is.EquivalentTo(expected)); 

Un vistazo a la documentación debe darle la sintaxis de las restricciones que se aplican a las colecciones.

Aquí hay una link (Esta es la versión 2.5.2)

N. B. Esperar es la abreviatura de Assert.That ...

+0

Su respuesta es mejor que la aceptada, qué lástima. Solo 3 minutos tarde para el reconocimiento. –

9

No sé si esto es lo que estás buscando, pero para las colecciones genéricas en lugar de utilizar:

Assert.Contains(member, list); 

que utilizo:

Assert.That(list.Contains(member)); 

que me parecen casi tan legibles.

Cuestiones relacionadas