NUnit Assert.Entspricht das, Was ich bin fehlt?
Geltend zu machen.Equals () - ruft nie
Equals()
operator ==
operator !=
Bin ich etwas fehlt? Ich habe IEquatable implementiert aber noch die Methoden, die nie aufgerufen wird, während mit nunit.
if (objectA != objectB) Assert.Fail(); //doesnt fail
if (!objectA.Equals(objectB)) Assert.Fail(); //doesnt fail
Assert.AreEqual(objectA, objectB); //fail
UPDATE
Ich sollte gewesen klarer.
public class Entity
{
public int ID { get; set; }
}
var objectA = new Entity() { ID = 1 };
var objectB = new Entity() { ID = 1 };
zwei separate Instanzen, die beide mit der gleichen ID habe ich implementiert, die alle relevanten Methoden, um diese Arbeit zu machen für ==, != und Gleich, aber nunit AreSame und AreEqual immer noch nicht rufen Sie diese Methoden.
- Ich habe genau das gleiche problem. Für jetzt bin ich mit Geltend zu machen.IsTrue(objectA.Equals(objectB));
- Ich habe das gleiche problem und ich habe festgestellt, dass es funktioniert, wenn die Objekte, die ich Vergleiche nicht die gleiche Referenz. ie erstellen 2 Objekte mit unterschiedlichen Eigenschaften, abgesehen von der Gleichheit im Vergleich Eigenschaften, dann Behaupten.Gleich funktioniert... Wenn es die gleiche Referenz verglichen wird (die werden sicherlich gleich), dann scheitert es! nicht gleich (NUnit 2.5)
- Sie sind auf der Suche für
Assert.AreEqual(objA, objB);
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sind Sie auf jeden Fall richtig.
Ich war wrestling mit einem ähnliches problem heute früher, bis ich fand deinen Beitrag und bin jetzt sicher, dass NUnit IsEqualTo() nicht konsistent rufen Sie die Equals überschreibt, zur Verfügung gestellt.
Sage ich konsequent, weil es manchmal tut. Als eine Angelegenheit von der Tat habe ich zwei Klassen. Das zweite abgeleitet von der ersten. Wenn ich Anrufe Ist.EqualTo() für Instanzen von der ersten, NUnit ruft die Equals überschreibt, für Instanzen der zweite tut es nicht.
Während das ist sehr eigenartig, ich habe keine Zeit, um weiter zu untersuchen, in was Los ist.
Menschen mit ähnlichen Problemen oder Lösungen sollten auf jeden Fall veröffentlichen, da dies eine sehr nervige Sache und eigentlich hatte mich der Zweifel an der Gültigkeit meines tests.
In der Zwischenzeit habe ich die folgenden Bejahen Klasse, die fordert, die Equals überschreibt sicher (ich habe es). Es NUnit verwendet, um einen einfachen Gleichheit Geltend machen, statt Ist.EqualTo() und etwas Rechtsmittel der Tatsache, dass dieser Weg NUnit nicht geben, die string-Repräsentationen der Objekte im Fall schlägt der test fehl.
Also hier ist es:
Verwenden Sie es wie diese:
und
Hoffe, das hilft.
Equals
Methoden: eine, die nimmt einen parameter vom Typobject
, eine, die einen parameter nimmt von einer Basis-Klasse geben. NUnit genannt, die man mit dem Typobject
. Diese Methode hatte einen Fehler: es enthielt eine Art check nicht Buchhaltung für die Unterklassen. Die Lösung ist, um das zu beheben Typ-check. Siehe die akzeptierte Antwort.Verwenden
Assert.AreEqual(a, b)
für WerttypenAssert.AreSame(a, b)
für Referenz-Typen. http://www.nunit.org/index.php?p=identityAsserts&r=2.2.7Assert.AreSame(a, b)
tatsächlich ausführenReferenceEquals(a,b)
, und möglicherweise nicht, was Sie suchen. Wenn Sie möchten, zu behaupten, die gleiche Objekt-Instanz, als diese Methode verwenden. Ansonsten könnten Sie besser verwendenAssert.AreEqual(a,b)
statt.Einige frameworks ermöglichen, für die Gleichstellung zu arbeiten, anders, bevor die Id zugeordnet ist (dh, die Einheit ist noch nicht gespeicherte) als afterwarsd, wenn klar, dass das Absicht ist, dass die Entity Id ist die einzige Grundlage für die Qualität. Verwenden Sie irgendeine Art von Rahmen oder ist Entity eine eigene Klasse?
Wenn es Ihre eigene Klasse können Sie zeigen den Kern der Equals () - Logik?
Cheers,
Berryl
FYI Geltend zu machen.AreSame ist NIE ein test zum überprüfen der Implementierung von IEquatable! Sehen ReferenceEquals in Ihre Hilfe, doc, um zu verstehen, dass die Aussage besser.
Sollte es funktionieren (siehe diese stellt sich die Frage,) wenn die Equals-Methode wurde überschrieben, richtig. Könnte es ein problem mit der Equals-Methode (obwohl, wenn es einfach aus int Vergleich würde ich denke nicht)? Könnte sich lohnen, einen Haltepunkt in deine Equals-Methode und dann läuft der test, um zu sehen, was passiert hinter den kulissen.
Möchten Sie vielleicht zu prüfen, diese Frage:
NUnit ist, Geltend zu machen.Gleich wirft exception "Geltend zu machen.Gleich sollte nicht verwendet werden, die für Behauptungen"
tl;dr;
Assert.Equals(obj1, obj2)
ist überschrieben von NUnit, und wirft eine Ausnahme. Sollten Sie verwendenAssert.AreEqual(obj1, obj2)
statt.