CollectionAssert.Contient(maliste, myItem) != Affirmer.IsTrue(maliste.Contient(myItem))
J'ai été à la recherche à la mise en œuvre de tests unitaires pour un contrôleur de contrôleur, en particulier pour les tests de collections. Sur le MSDN exemple l'utilisation de CollectionAssert.Contains()
confirme si un objet apparaît dans une liste.
J'ai un List<myObject>
où myObject
implémente IEquatable
(c'est à dire la mise en œuvre d'un Equals()
, de sorte que le List<myObject>.Contains()
est en mesure de bien discerner l'existence (ou la non-existence d'un objet de type myObject
dans la liste).
La CollectionAssert.Contains()
(pour un MS-VS test, pas nunit) fonction, cependant, ne semble pas appeler Equals()
.
Alors je me demandais si c'est pour une utilisation sur des tableaux simples?
Si non, comment est-il en mesure de comparer des objets personnalisés?
J'ai tout simplement changé ma affirmer dans ce cas à Assert.IsTrue(myList.Contains(myObjectInstance))
.
IsTrue(myList.Contains(item))
, ou de remplacer le object
version de Equals()
et l'ont délégué à votre IEquatable
version.OriginalL'auteur Daniel | 2011-09-21
Vous devez vous connecter pour publier un commentaire.
Regardant le code pour
CollectionAssert.Contains()
, la comparaison est effectuée par l'itération de la collection, et de comparer chaque élément de la cible éléments avecobject.Equals(current, target)
.Donc la réponse à votre question est que si vous n'avez pas remplacé la
object
version deEquals()
de sorte qu'il distribue à votreIEquatable<T>
version, vous devez. Sinon, le test est voué à l'échec si la référence à l'égalité n'est pas remplie, l'IEquatable<T>
surcharge deEquals()
ne modifie pas la surcharge hérité deobject
.OriginalL'auteur dlev
Il semble CollectionAssert.Contient n'est pas en regardant votre objet les valeurs des membres de, mais est de comparer des instances adresse mémoire. L'exemple suivant est CollectionAssert échoue, en raison du fait que, même si elles ont les mêmes valeurs de membre, obj et obj2 ne sont pas de la même instance d'objet;
Cela étant dit, l'exemple suivant est CollectionAssert va réussir, car elle sera la recherche de obj2, et pas n'importe quel objet qui est égal à obj2;
En d'autres termes, CollectionAssert.Contient compare les instances et de la Liste(T).Contient "détermine l'égalité en utilisant le comparateur d'égalité par défaut, tel que défini par l'objet de la mise en œuvre de la IEquatable.Méthode Equals pour T (le type de valeurs dans la liste)."
Référence : http://msdn.microsoft.com/en-us/library/bhkz42b3.aspx
OriginalL'auteur Fafoon