Parece que CollectionAssert
no se puede usar con genéricos. Esto es súper frustrante; el código que quiero probar usa genéricos. ¿Qué voy a hacer? Escribir un texto estándar para convertir entre los dos? ¿Verifica manualmente la equivalencia de cobro?Colección ¿Uso de postres con genéricos?
Esta falla:
ICollection<IDictionary<string, string>> expected = // ...
IEnumerable<IDictionary<string, string>> actual = // ...
// error 1 and 2 here
CollectionAssert.AreEqual(expected.GetEnumerator().ToList(), actual.ToList());
// error 3 here
Assert.IsTrue(expected.GetEnumerator().SequenceEquals(actual));
errores del compilador:
de error 1:
'System.Collections.Generic.IEnumerator>' no contiene una definición para 'ToList' y no se pudo encontrar ningún método de extensión 'ToList' que aceptara un primer argumento de tipo 'System.Collections.Generic.IEnumerator>'
Error 2
'System.Collections.Generic.IEnumerator>' no contiene una definición para 'ToList' y ningún método de extensión 'ToList' aceptar un primer argumento de tipo 'System.Collections.Generic. IEnumerator>' se pudo encontrar
Error 3
'System.Collections.Generic.IEnumerator>' no contiene una definición para '' SequenceEquals y ningún método de extensión 'SequenceEquals' aceptar un primer argumento de escriba 'System.Collections.Generic.IEnumerator>' se puede encontrar
¿Qué estoy haciendo mal? ¿No estoy usando extensiones correctamente?
Actualización: Ok, esto se ve un poco mejor, pero todavía no funciona:
IEnumerable<IDictionary<string, string>> expected = // ...
IEnumerable<IDictionary<string, string>> actual = // ...
CollectionAssert.AreEquivalent(expected.ToList(), actual.ToList()); // fails
CollectionAssert.IsSubsetOf(expected.ToList(), actual.ToList()); // fails
no quiero ser la comparación de las listas; Solo me importa establecer igualdad de membresía. El orden de los miembros no es importante. ¿Cómo puedo evitar esto?
¿Estás seguro? Me ha estado dando errores de compilación, que publicaré mañana por la mañana. –
Estaba equivocado; CollectionAssert NO funcionará en un ICollection. Funciona solo con ICollection. Esto se solicitó en Connect, pero hasta ahora no se implementó. Posible solución: http://stackoverflow.com/questions/662458/unittesting-ilist-with-collectionassert –
Si no recuerdo mal, las interfaces ICollection e ICollection son MUY diferentes. Este no es el caso de IEnumerable versus IEnumerable . Por favor revisa sus métodos. ICollection se usa para algo diferente de ICollection . ICollection ni siquiera tiene el método ADD, se usa para propósitos de "más bajo nivel" como multithreading y clasificación. Por lo tanto, creo que debería encontrar una interfaz que se adapte mejor a sus necesidades, ¿simple IEnumerable tal vez? –
quetzalcoatl