Was ist der Unterschied zwischen EqualTo () und EquivalentTo () in NUnit?

9

Wenn ich ein Dictionary<string, int> actual habe und dann ein komplett neues Dictionary<string, int> expected mit den gleichen Werten wie actual erstelle.

  • Durch Aufruf von Assert.That(actual, Is.EqualTo(expected)); wird der Test bestanden.

  • Bei Verwendung von Assert.That(actual, Is.EquivalentTo(expected)); wird der Test nicht bestanden.

Was ist der Unterschied zwischen EqualTo() und EquivalentTo() ?

Bearbeiten:

Die Meldung der Ausnahme, wenn der Test nicht erfolgreich ist, lautet wie folgt:

%Vor%

Mein Code sieht so aus:

%Vor%     
Garth Marenghi 29.06.2011, 08:28
quelle

2 Antworten

1

Beides funktioniert für mich:

%Vor%
  • Is.EqualTo() in NUnit, wenn beide Objekte ICollection sind, wird CollectionsEqual(x,y) verwendet, die beide iteriert, um den Unterschied zu finden. Ich denke, es ist gleich Enumerable.SequenceEqual(x,y)

  • Is.EquivalentTo macht dies sofort, weil nur die folgenden Sequenzen unterstützt werden: EquivalentTo(IEnumerable)

abatishchev 29.06.2011, 08:44
quelle
4

Der Titel der Frage zwingt mich, Folgendes zu sagen:

Bei Aufzählungen führt Is.EquivalentTo() den Vergleich durch und erlaubt eine beliebige Reihenfolge der Elemente. Im Gegensatz dazu berücksichtigt Is.EqualTo() die genaue Reihenfolge der Elemente wie Enumerable.SequenceEqual() .

In Ihrem Fall gibt es jedoch kein Problem mit der Bestellung. Der Hauptpunkt hier ist, dass Is.EqualTo() zusätzlichen Code für den Wörterbuchvergleich hat, wie hier .

Nicht so Is.EquivalentTo() . In Ihrem Beispiel vergleicht es Werte vom Typ KeyValuePair<string,List<int>> für Gleichheit mit object.Equals() . Da die Wörterbuchwerte vom Referenztyp List<int> sind, wird die Referenzgleichheit für den Vergleich verwendet.

Wenn Sie Ihr Beispiel so ändern, dass die Liste {1, 2} nur einmal instanziiert und in beiden Wörterbüchern verwendet wird, wird Is.EquivalentTo() erfolgreich sein.

    
tm1 12.03.2014 10:32
quelle

Tags und Links