CollectionAssert utiliser avec les génériques?

Il semble que CollectionAssert ne peut pas être utilisé avec les médicaments génériques. C'est super frustrant, le code que je veux tester ne utiliser des génériques. Que dois-je faire? Écrire réutilisable pour convertir entre les deux? Manuellement, vérifiez les collection d'équivalence?

D'échec:

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));

Des erreurs du compilateur:

Erreur 1:

'Système.Les Collections.Génériques.IEnumerator>' ne contient pas une définition pour 'ToList' et aucune méthode d'extension 'ToList' acceptant un premier argument de type 'System.Les Collections.Génériques.IEnumerator>' a pu être trouvé

Erreur 2

'Système.Les Collections.Génériques.IEnumerator>' ne contient pas une définition pour 'ToList' et aucune méthode d'extension 'ToList' acceptant un premier argument de type 'System.Les Collections.Génériques.IEnumerator>' a pu être trouvé

Erreur 3

'Système.Les Collections.Génériques.IEnumerator>' ne contient pas une définition pour 'SequenceEquals' et aucune méthode d'extension 'SequenceEquals' acceptant un premier argument de type 'System.Les Collections.Génériques.IEnumerator>' a pu être trouvé

Ce que je fais mal? Je ne suis pas à l'utilisation des extensions correctement?

Mise à jour: Ok, cela ressemble un peu mieux, mais ne fonctionne toujours pas:

IEnumerable<IDictionary<string, string>> expected = //...

IEnumerable<IDictionary<string, string>> actual = //...

CollectionAssert.AreEquivalent(expected.ToList(), actual.ToList()); //fails
CollectionAssert.IsSubsetOf(expected.ToList(), actual.ToList()); //fails

Je ne veux pas être la comparaison des listes; je ne se soucient définir l'appartenance de l'égalité. L'ordre des membres est sans importance. Comment puis-je contourner ce problème?

  • Êtes-vous sûr? Il a été de me donner des erreurs de compilation, que je poste demain matin.
  • J'ai eu tort; CollectionAssert ne fonctionnera PAS sur un ICollection<T>. Il fonctionne avec ICollection seulement. Cela a été demandé lors de la connexion, mais pour l'instant pas mis en œuvre. Possible travail autour de: stackoverflow.com/questions/662458/...
  • Si je me souviens bien, le ICollection et ICollection<T> les interfaces sont TRÈS différents. Ce n'est pas le cas de IEnumerable contre IEnumerable<T>. Veuillez vérifier leurs méthodes. ICollection est utilise pour AUTRE chose que ICollection<T>. ICollection n'ont même pas de méthode ADD - il est utilisé pour "plus bas niveau" des buts comme le multithreading et de l'ordonnancement. Donc, je pense que vous devriez plutôt de trouver une interface qui permettra de répondre à vos besoins, simple IEnumerable peut-être?
  • "L'ordre des membres n'a pas d'importance" - c'est exactement ce que CollectionAssert.AreEquivalent est pour. Quel est le message d'erreur que vous obtenez avec le test? (peut-être que votre attendues et réelles ne sont pas équivalents!)
  • C'est SequenceEqual, pas SequenceEquals, c'est probablement ce que votre erreur de compilation
  • 3 devrait fonctionner, c'est ce que j'utilise Affirmer.IsTrue(prévu.SequenceEqual(réel));
  • Microsoft open-source de cette bibliothèque encore? Pouvons-nous déclarer et de régler le problème, alors CollectionAssert.AreEqual fonctionne avec plusieurs types?

InformationsquelleAutor Nick Heiner | 2010-03-14