Wir haben eine Testsuite, die hauptsächlich JUnit-Assertions mit Hamcrest-Matchern verwendet. Einer unserer Mitarbeiter begann mit AssertJ zu experimentieren und beeindruckte die Leute mit seiner Syntax, Flexibilität und Deklarativität. JUnit bietet eine Funktion, für die ich in AssertJ kein Äquivalent finden kann: Hinzufügen einer benutzerdefinierten Assert-Fehlermeldung.
Wir vergleichen häufig Objekte, die nicht für die menschliche Lesbarkeit ausgelegt sind und zufällig erscheinende IDs oder UUIDs haben, und es ist unmöglich, anhand der darin enthaltenen Daten zu erkennen, wie sie aussehen sollen. Dies ist eine unvermeidbare Situation für unsere Codebasis. Leider besteht ein Teil des Zwecks darin, Daten zwischen anderen Diensten abzubilden, ohne unbedingt zu verstehen, was sie sind.
In JUnit stellt die assertThat
Methode eine Version mit einem String reason
Parameter vor dem Parameter Matcher<T>
bereit. Dies macht es trivial, eine kurze Debug-Zeichenfolge hinzuzufügen, die etwas Licht in das Problem bringt, beispielsweise was der Vergleich für einen Menschen bedeuten sollte.
AssertJ hingegen bietet eine Vielzahl verschiedener generischerstatic assertThat
Methoden, die eine Form der Schnittstelle Assert oder eine seiner vielen implementierenden Klassen zurückgeben. Diese Schnittstelle bietet keine Standardmethode zum Festlegen einer benutzerdefinierten Nachricht, die bei Fehlern enthalten sein soll.
Gibt es eine Möglichkeit, diese Funktionalität von der AssertJ-API oder einer ihrer Erweiterungen abzurufen, ohne für jeden Assert-Typ, dem wir Nachrichten hinzufügen möchten , eine benutzerdefinierte Assert-Klasse erstellen zu müssen?
withFailMessage
Materie; Ich mag AssertJ, aber das ist scheiße.