Frage

Ich erstellung den Gerätetest, der zwei Objekte desselben Typs miteinander verbinden muss. Ich habe mich entschieden, die SemanticComparison-Bibliothek zu verwenden, um diese Aufgabe zu handhaben, ohne dass ein benutzerdefinierter Vergleichscode schreibt. Beim Vergleich von flachen Objekten funktioniert es wirklich gut, es gibt Probleme, wenn das Objekt verschachteltes Objekt enthält, das auch mittels WEITER verglichen werden muss.

generasacodicetagpre.

Dies funktioniert nicht, weil inneres Objekt mit Bezug genommen wird, nicht im Gegenzug:

generasacodicetagpre.

Um es zu funktionieren, musste ich Proxy des verschachtelten Objekts erstellen, sodass er die Standardeinführung überschreibt.

generasacodicetagpre.

Nun, es funktioniert ordnungsgemäß, aber stellen Sie sich vor, dass wir nach einiger Servicecode-Refactoring den Fehler einführen, der dazu führt, dass die Werteigenschaft der inneren Klasse vom erwarteten Wert unterscheidet. Das kühle Merkmal des SemanticComparison ist, dass es den Namen des Mitglieds protokollieren kann, der Ungleichheit verursacht. In diesem Fall wird jedoch nur "innere" als Mismatch zurückgegeben, nicht der Name der spezifischen Eigenschaft in der inneren Klasse.

Ich vermisse etwas? Ist es möglich, es zu konfigurieren, um das tatsächliche Fehlanpassungselement zurücksenden zu können.

Dies ist offensichtlich kein Problem für einfache Datenstrukturen wie in diesem Beispiel, aber es könnte eine Unannehmlichkeiten sein, um einen realen Lebenscode zu testen.

War es hilfreich?

Lösung

Da ich niemand beantwortet habe, werde ich meine eigene Antwort geben.

Es scheint also, dass Sie es nicht ootb tun können, es sei denn, Sie schreiben einen zusätzlichen Code. Ich habe den Code in Set von Erweiterungsmethoden gewickelt. Mit diesen Methoden können Sie angeben, welche inneren Eigenschaften / Sammeleigenschaften mit innerer Abbildung verglichen werden sollen, nicht durch Bezugnahme. Sie müssen keine Proxys manuell erstellen, alles wird intern von diesen Erweiterungen behandelt. Und die Ergebnisse aller internen Vergleiche werden protokolliert, sodass Sie genau sehen können, welches Mitglied einen ungültigen Wert hat.

Hier ist der Test aus der Frage mit der Verwendung von "Innererlikeess" -Stard-Erweiterungsmethode.

generasacodicetagpre.

Sie können sehen, dass die Werteigenschaften von inneren Objekten nicht übereinstimmen, so dass der Test fehlschlägt. Und es fehlt mit den folgenden Nachrichten in der Ausgabe:

generasacodicetagpre.

Sie finden den Quellcode und mehr Beispiele auf Github.

https://github.com/jmansar/semanticComparisExextensions

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top