Ich habe eine Klasse, die mehrere Strukturen enthält:
%Vor%In einem Komponententest mache ich einen Funktionsaufruf und vergleiche die Ergebnisse:
%Vor%Aber Assert.AreEqual gibt immer AssertFailedException aus. Die Objekte sind identisch, das habe ich mit dem Debugger verifiziert. Bitte teilen Sie Ideen mit. Danke.
Der Aufruf Assert.AreEqual (erwartet, erwartet) sollte nicht fehlschlagen. Wenn Sie in Ihrer Frage einen Fehler gemacht haben und Sie Assert.AreEqual (erwartet, aktuell) gemeint haben und Ihre HomeControllerHelper.GetNavigationMenuByUserRole eine neue Instanz von NavigationMenu zurückgibt, dann wird der Aufruf von Assert.AreEqual immer fehlschlagen Ihr Typ NavigationMenu ist eine Klasse und daher ein Referenztyp, auch wenn Sie die Eigenschaften der Instanzen auf die gleichen Werte setzen.
Assert.AreEqual führt eine Gleichheitsüberprüfung durch, wenn die beiden Variablen auf dieselbe Referenz verweisen (auch ReferenceEqual genannt) und nicht, wenn die beiden Referenzen dieselben (Eigenschafts-) Werte enthalten.
Sie können die Equals-Methode Ihrer NavigationMenu-Klasse überschreiben, um eine benutzerdefinierte Implementierung bereitzustellen, wenn zwei Instanzen Ihrer Klasse identisch sind.
Angenommen, es sollte Assert.AreEqual(expected, actual);
sein, so wie es in Kommentaren angezeigt wurde:
Sie müssen definieren, wie NavigationMenuItem
Objekte verglichen werden. Atm es ist nur checking wenn es die gleiche Instanz und offensichtlich sind sie nicht so sicher, müssen scheitern.
Weil Sie (wahrscheinlich) zwei verschiedene Instanzen eines Objekts vergleichen, jedoch mit den gleichen Parametern. Damit die Objekte "gleich" sind, müssen Sie die Equals-Methode für das Objekt überschreiben und dort einen Vergleich implementieren.
Tags und Links c# unit-testing nunit