Lesbare Tests durch eigene AssertJ-Assertions
Kurzes Beispiel, wie man eigene AssertJ-Assertions erstellt, um Test-Code leserlicher zu gestalten.
Wir haben eine Klasse namens MemoryAppender. Diese dient dazu, Logging zu testen. Sie enthält die Methoden contains und containsException. (In unserem Fall verwenden wir diese Klasse, um für Schulungen selbstvalidierende Übungsaufgaben mittels JUnit-Tests zu erstellen).
Vorher
Ohne Custom Assertion würden die Asserts z.B. so aussehen:
Das ist ziemlich unübersichtlich:
- Boilerplate-Code für den Bau der Nachricht wiederholt sich
- Lokale Variablen sind nötig, um Literale nicht duplizieren zu müssen
Nachher
Mit einer eigenen AssertJ-Assertion könnte man das alles in die Assertion verlagern. Der Test-Code würde dadurch deutlich lesbarer / verständlicher:
Implementierung der eigenen Assertion
Wie man dies konkret umsetzt zeigt folgende selbstdefinierte AssertJ-Assertion:
Fazit
Durch eine eigene AssertJ-Assertion lässt sich unleserlicher Boilerplate-Code aus Tests auslagern. Dadurch können Tests wesentlich verständlicher gestaltet und vom Leser auf einen Blick erfasst werden.
Die Implementierung einer eigenen AssertJ-Assertion ist nicht schwer. Da Code häufiger gelesen und angepasst als geschrieben wird, lohnt sich der geringe initiale Mehraufwand fast immer.
Quellen / Links