Comment Comparer deux objets dans l'unité de test?
public class Student
{
public string Name { get; set; }
public int ID { get; set; }
}
...
var st1 = new Student
{
ID = 20,
Name = "ligaoren",
};
var st2 = new Student
{
ID = 20,
Name = "ligaoren",
};
Assert.AreEqual<Student>(st1, st2);//How to Compare two object in Unit test?
Comment Comparer les deux de la collection dans Unitest?
- Que demandez-vous?
- Demandez-vous comparer l'égalité d'objets et de test que les objets sont équivalents?
Vous devez vous connecter pour publier un commentaire.
Ce que vous cherchez est ce qu'en xUnit des Modèles de Test est appelé Test Spécifique À L'Égalité.
Alors que vous pouvez choisir de remplacer la méthode Equals, cela peut conduire à L'Égalité De La Pollution parce que la mise en œuvre, vous devez le test peut ne pas être le plus approprié pour le type en général.
Par exemple, Domain-Driven Design distingue entre Entités et des Objets de Valeur de, et ceux-là sont très différentes de l'égalité sémantique.
Lorsque c'est le cas, vous pouvez écrire une comparaison personnalisée pour le type en question.
Si vous êtes fatigués de faire cela, AutoFixture's à la Ressemblance de classe offre à des fins générales de Test Spécifique à l'Égalité. Avec vos Élèves de la classe, cela vous permettra d'écrire un test comme ceci:
Ce n'est pas vous obliger à remplacer est Égal à l'Élève.
Ressemblance effectue une sémantique de comparaison, de sorte qu'il peut aussi comparer deux types différents, aussi longtemps qu'ils sont sémantiquement similaires.
Si comparant le public et les membres est suffisante pour votre cas d'utilisation, il suffit de confiture de vos objets en JSON et de comparer les résultant des chaînes:
Classe JavaScriptSerializer
Pros
Equals
Contre
Vous devez fournir un
override
dede l'Objet.Égal à
etde l'Objet.GetHashCode
:Comme pour vérifier si les deux collections sont égaux, l'utilisation
Énumérable.SequenceEqual
:Notez que vous devrez peut-être utiliser le surcharge qui accepte un
IEqualityComparer<T>
.Il avait vraiment l'air AutoFixture la Ressemblance est ce dont j'avais besoin pour ce problème (merci Mark Seeman) toutefois, il ne prend pas en charge la comparaison de la collecte des éléments de ressemblance (il ya un couple de questions ouvertes sur la question, mais ils n'ont pas été résolu).
J'ai trouvé CompareObjects par Kellerman Logiciel fait le truc:
https://github.com/GregFinzer/Compare-Net-Objects
http://www.infoq.com/articles/Equality-Overloading-DotNET
Cet article peut être utile , je résoudre ce problème simplement en utilisant refcetion dump tout rempli;
Ensuite, nous avons juste besoin de comparer deux chaînes de caractères.
Code Ici:
J'ai juste fait:
Bonjour tout d'abord ajouter votre projet de test Newtonsoft.Json avec Nuget PM
H> Install-Package Newtonsoft.Json -Version 10.0.3
Puis ajouter le fichier de test
Utilisation:
Marque Seeman réponse du couvre la question générale: le test-l'égalité est une préoccupation distincte, de sorte que le code devrait donc être externe à la classe elle-même. (Je n'ai pas vu de "l'égalité de la pollution", mais que). Aussi, c'est une préoccupation qui est isolé à vous-unité de projet de test. Mieux encore, il est dans de nombreux cas, un "problème": il y a un nombre quelconque de l'affirmation de bibliothèques disponibles qui vous permettent de tester l'égalité de n'importe quel nombre de façons arbitraires. Il suggère un, mais il ya beaucoup qui ont vu le jour ou devenir beaucoup plus mature dans les années intermédiaires.
À cette fin, permettez-moi de suggérer Couramment Affirmations. Il a de nombreuses fonctionnalités pour toutes sortes de comparaisons. Dans ce cas, il serait très simple:
ou
Ont un coup d'oeil sur le lien suivant. Sa solution sur le projet de code et je l'ai utilisé aussi. Il fonctionne très bien pour comparer des objets dans les deux NUnit et MSUnit
http://www.codeproject.com/Articles/22709/Testing-Equality-of-Two-Objects?msg=5189539#xx5189539xx
Vous pouvez également utiliser NFluent avec cette syntaxe profonde comparer deux objets sans la mise en œuvre de l'égalité pour vos objets. NFluent est une bibliothèque qui tente de simplifier l'écriture lisible le code de test.
Cette méthode avec d'échouer avec une exception contenant toutes les différences au lieu d'échouer à la première. Je trouve que cette fonctionnalité soit un plus.
IsDeepEqualTo
ne semble plus exister!HasFieldsWithSameValues
au lieu deIsDeepEqualTo
...?Peut-être vous avez besoin d'ajouter un
public bool Equals(object o)
à la classe.C'est ce que je fais:
HTH..
Si vous utilisez NUnit vous pouvez utiliser cette syntaxe et de spécifier un IEqualityComparer spécifiquement pour le test:
Voir aussi ici: L'Égalité De Contrainte (NUnit 2.4 /2.5)