2017-07-24 3 views
0

J'utilise xunit pour tester un appareil, j'ai une liste d'objets attendus et une liste d'objets réels. Comment puis-je comparer un élément spécifique de chaque objet (une date) dans les deux listes pour voir si elles sont égales? J'ai trouvé la méthode Assert.Collection mais je n'arrive pas à comprendre comment elle peut comparer le contenu de deux listes.comparer deux listes avec Xunit

Répondre

3

Vous n'avez pas besoin de détails XUnit. Ce problème peut être résolu en utilisant LINQ.

Pour comparer un élément de la liste, utilisez simplement:

Assert.True(isList[1] == shouldList[1]); 

Juste accéder aux listes de contenu directement. Si vous ne connaissez pas l'index, vous pouvez utiliser LINQ:

Assert.True(shouldList.Any(x => x == isList[1]); 

Cela vérifiera si le shouldList contient un élément égal au second élément isList.

Si vous voulez comparer si le contenu des listes est identique, sans connaître la séquence, utilisez quelque chose comme ceci:

Assert.True(shouldList.All(shouldItem => isList.Any(isItem => isItem == shouldItem))); 

Ce contrôle pour tous les éléments shouldList au moins un élément dans isList est identique.

REMARK:

J'utilise l'opérateur == pour comparer. Si cela fonctionne, cela dépend du contenu de la liste. Vous avez dit que vous comparez des dates, ici le equals vérifiera l'égalité, pas l'identité. Pour la plupart des types de référence, le equals ne fera que comparer l'identité. Ici, vous devez soit remplacer l'implémentation equals par défaut, soit comparer des champs et des propriétés personnalisés au lieu d'utiliser l'opérateur ==.

+0

merci pour votre aide, les tests passent maintenant. Je n'ai aucune option pour marquer cela comme la réponse si – proteus

+0

@proteus devrait être le drapeau près du bouton upvote https://stackoverflow.com/help/accepted-answer – Iqon

+0

trouvé, merci – proteus