Skip to content

Messaging Utils

Dustin Glaser edited this page Nov 10, 2022 · 11 revisions

Assertions2

In Anlehnung an die Klasse Assertions aus JUnit sind in Klasse Assertions2 Klassenmethoden für Standard-Tests zu finden (z.B. Test auf Objektgleichheit). Jede der Methoden erwartet neben einem eventuellen erwarteten Objekt wahlweise ein aktuales Objekt oder ein Callable-Objekt, welches das aktuale Objekt liefert. Weiter muss immer ein Context sowie ein PreCommentSupplier angegeben werden.

Bei allen Assertions2-Methoden, die ein Callable-/ObjectCallable-Objekt erhalten, wird automatisch die geforderte Nachricht not implemented geliefert, wenn die aufgerufene Methode nicht implementiert ist.

Es besteht die Möglichkeit, eigene Tests nach dem gleichen Schema aufzubauen. Zum Bauen von Tests stehen in Assertions2 folgende Factory-Methoden bereit:

  • testOfCallBuilder() liefert einen TestOfCall.Builder. Ein Test eines TestOfCall läuft wie folgt ab: Zunächst wird das gegebene Callable-Objekt aufgerufen. Danach wird der gegebene Evaluator (BooleanSupplier, im Builder festgelegt) aufgerufen. Der Test wird genau dann als erfolgreich gewertet, wenn dieser true liefert.

  • testOfObjectBuilder() liefert einen TestOfObject.Builder. Ein Test eines TestOfObject läuft wie folgt ab: Der gegebene Evaluator (Predicate, im Builder festgelegt) wird auf das gegebene Objekt aufgerufen. Der Test wird wieder genau dann als erfolgreich gewertet, wenn dieser true liefert.

  • testOfObjectCallBuilder() liefert einen TestOfObjectCall.Builder. Ein Test eines TestOfObjectCall läuft wie ein TestOfObject ab: Der Wert wird aber von dem gegebenen ObjectCallable-Objekt abgerufen. Wenn der Aufruf des _ObjectCallable-Objekts in einer Exception resultiert, wird der Test als fehlgeschlagen gewertet.

  • testOfThrowableCallBuilder() liefert einen TestOfThrowableCall.Builder. Ein Test eines TestOfThrowableCall läuft wie folgt ab: Zunächst wird das gegebene Callable-Objekt aufgerufen. Wenn der Aufruf nicht in einer Exception resultiert, wird der Test als fehlgeschlagen gewertet. Ansonsten wird überprüft, ob die geworfene Exception eine Exception vom erwarteten Typ ist (im Builder festgelegt). Ist das nicht der Fall, wird der Test sofort als fehlgeschlagegen gewertet. Ansonsten wird die geworfene Exception vom gegebenen Evaluator (Predicate, im Builder festgelegt) überprüft. Der Test wird genau dann als erfolgreich gewertet, wenn der Evaluator true liefert.

Context

Ein Objekt von Context enthält Informationen über den Kontext eines Tests. Die Informationen eines Context-Objekts werden bei fehlschlagender Ausführung eines Tests in der Bewertung ausgegeben.

Zum einen ist in einem Context-Objekt das getestete Subjekt festgelegt. Die Angabe kann über ein Stringifier-verträgliches Objekt erfolgen.

Zum anderen sind in einem Context-Objekt Properties festgelegt: Jede Property besteht aus einem Key (String) und einem Schlüssel (beliebiges Stringifier-verträgliches Objekt). Eine Property beschreibt eine Eigenschaft eines konkreten Tests, z.B. die Länge einer Liste, die getestet wurde.

Ein Context kann für beliebig viele Tests verwendet werden. Es wird empfohlen, einen Context je Testklasse oder Testmethode zu erzeugen.

Ein ContextBuilder kann über über die Klassenmethode Assertions2.contextBuilder() abgerufen werden.

PreCommentSupplier

PreCommentSupplier ist ein funktionales Interface, das für das Resultat eines fehlgeschlagenen Tests einen Kommentar liefert, welcher in der Bewertung angezeigt wird.

Tests

Alle Tests, die einen Parameter vom Typ Callable-/ObjectCallable erhalten, überprüfen, ob eine CrashException geworfen wird und resultieren in einem entsprechenden Kommentar.

Dieses Verhalten ist aktuell noch nicht implementiert. Es muss aber nicht (mehr) anderweitig überprüft werden, ob eine CrashException geworfen wird.

Stringifier

Ein Stringifier transformiert ein gegebenes Object zu einem String oder null, wenn der Stringifier das Objekt nicht zu einem String transformieren kann. Im BasicEnvironment wird standardmäßig ein Stringifier festgelegt, der die folgenden Stringifier in der gegebenen Reihenfolge aufruft und den ersten gelieferten String liefert.

  • ReflectionStringifier: Reflection-Klassen (Class, Field, Method und Parameter) werden in eine geeignete Darstellung umgewandelt.

Liefert keiner der Stringifier einen String, wird stattdessen der String von Objects.toString geliefert.

Der Standard-Stringifier ist in der Regel ausreichend.

Clone this wiki locally