La comparaison de Deux objets à l'aide de l'Affirmer.AreEqual()
Je m 'écrire des cas de test pour la première fois dans visual studio c#, j'ai une méthode qui retourne une liste d'objets, et je veux comparer avec une autre liste d'objets à l'aide de la Assert.AreEqual()
méthode.
J'ai essayé de faire cela, mais l'assertion échoue, même si les deux objets sont identiques.
Je voulais savoir si cette méthode, les deux paramètres de la comparaison de références ou le contenu de l'objet,
Dois-je surcharge le ==
opérateur pour faire ce travail?
- Êtes-vous à l'aide de Nunit?
- Vérifiez ce post: stackoverflow.com/questions/10826199/...
Vous devez vous connecter pour publier un commentaire.
Si vous utilisez
NUnit
c'est ce que dit la documentationEn général, si vous êtes de la comparaison de deux objets et vous voulez avoir de la valeur basée sur l'égalité, vous devez remplacer le
Equals
méthode.À réaliser ce que vous êtes à la recherche pour essayer quelque chose comme cela:
et dans votre unité de test:
Ces réponses sont trop compliquée pour la question. Il n'y a pas de remplacements nécessaire de comparer les deux Listes, et vous n'avez pas besoin de sortir plusieurs affirmations.
Microsoft utilise la classe suivante, CollectionAssert.
Cela fonctionne pour les Listes, les Dictionnaires, et tout ce qui implémente l'interface ICollection.
La documentation de microsoft est à l'emplacement suivant, et détaille les différents types d'affirmations qui peuvent être faites sur les collections
http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.testtools.unittesting.collectionassert.aspx
Cependant, comme mentionné par @Bart, cela ne fonctionne pas comme prévu dans les Listes d' (complexe) des Objets, et la méthode Equals peut encore avoir besoin d'être remplacé pour ces cas.
CollectionAssert.AreEqual
ne fonctionne que sur les Listes de types de base/propriétés scalaires pas sur les Listes d' (complexe) des Objets. Parce que j'ai deux listes à la fois d'avoir un objet qui contiennent exactement les mêmes valeurs, mais l'a toujours des listes n'étaient pas égaux. Donc, j'ai encore besoin de remplacer laEquals
méthode des Objets de la classe avant que travaillé :(.Vous pourriez sérialiser et test de la chaîne résultante.
Affirmer.AreEqual dans
xUnit
sur .NET permet de vérifier si les objets sont identiques cependant l'identité de l'objet est différente de la valeur equallity il semblerait que vous êtes à la recherche pour la valeur de l'égalité. C'est à dire. "Sont les objets de ma liste de la même valeur?", qui est pourquoi il "échoue" les deux listes ne sont pas identiques même si les valeurs de chaque objet, dans chaque liste peut représenter la même valeur.Habituellement dans un effort de test, il devrait être suffisant pour tester le comte de collecte et d'éléments clés.
Le dernier test n'a pas à être au milieu de l'élément et est simplement destiné à tester un élément dans la liste, la seule raison pourquoi il n'est pas un élément aléatoire est parce que vous voulez être en mesure de reproduire les résultats de votre test.
Affirmer.AreEqual() compare les références. Généralement lorsque l'on compare les listes je compare le nombre d'éléments et que certaines propriétés d'un point exact dans la liste ou directement à l'élément dans la liste (mais là encore, c'est la référence).
Si vous voulez comparer des objets selon le contenu que vous auriez à mettre en œuvre certaines récursive de l'Objet de la Comparaison, mais je ne pense pas qu'il est approprié pour les Tests Unitaires, parce que vous voulez toujours exécuter aussi vite que possible.