2.4.3. Überprüfen der Ergebnisse durch Validatoren

Innerhalb von checkerberry db werden erwartete Testdaten mit den Werten aus der Datenbank verglichen. Zu diesem Zweck wird zunächst eine Zuordnung einer Zeile aus den Testdaten mit der zugehörigen Zeile aus der Datenbank vorgenommen. Die Werte der einzelnen Spalten werden dann verglichen. Der Vergleich der Spaltenwerte erfolgt dabei über Validatoren.

Checkerberry db verwendet die folgenden Standard-Validatoren in der angegebenen Reihenfolge:

  1. TimeValidator

  2. DateValidator

  3. NumberValidator

  4. StringValidator

Jeder Validator überprüft anhand des Werts aus den erwarteten Testdaten, ob er für die Validierung in Frage kommt. Der erwartete Wert „2010-01-01 12:00:00.0“ würde beispielsweise durch den TimeValidator validiert werden, während der Wert „1.0“ durch den NumberValidator validiert werden würde. Die genaue Funktionsweise der Standard-Validatoren wird in Abschnitt 2.4.3.1, „Verwendung der Standard-Validatoren“ ausführlicher beschrieben.

Bei der Überprüfung eines Wertes werden die Validatoren der Reihe nach durchlaufen. Im Folgenden wird dies am Beispiel des erwarteten Wertes „2010-45-90“ erläutert.

Zunächst prüft der TimeValidator, ob er für die Überprüfung zuständig ist. Da der erwartete Wert nicht dem Muster des TimeValidators entspricht, wird die Anfrage an den nächsten Validator in der Liste weitergereicht. Der DateValidator ist aufgrund des Musters für die Überprüfung des Wertes zuständig. Der DateValidator konvertiert daraufhin den erwarteten Wert und den entsprechenden Wert aus der Datenbank in ein java.util.Date-Objekt. Diese Konvertierung scheitert, da „2010-45-90“ kein gültiges Datum ist. Da bereits die Konvertierung fehlgeschlagen ist, scheint der Validator trotz des übereinstimmenden Musters doch nicht für die Überprüfung zuständig gewesen zu sein. Aus diesem Grund wird die Anfrage an den nächsten Validator weitergereicht. Der NumberValidator fühlt sich aufgrund des Musters nicht für die Validierung zuständig. Daher wird die Anfrage an den letzten Validator, den StringValidator, weitergereicht. Der StringValidator ist für alle Werte zuständig und führt die Überprüfung in jedem Fall durch. In diesem Fall wird die Zeichenkette „2010-45-90“ mit dem entsprechenden Wert aus der Datenbank als Zeichenkette verglichen. Wenn die Werte nicht übereinstimmen, wird der Test mit einer entsprechenden Fehlermeldung beendet.

Eine Besonderheit bei der Validierung in obigem Beispiel besteht in der Behandlung von Konvertierungsfehlern. Ein Validator hat bei der Überprüfung eines Wertes drei mögliche Ergebnisse:

  1. die Werte sind gemäß der speziellen Prüfung identisch

  2. die Werte sind gemäß der speziellen Prüfung unterschiedlich

  3. der Validator ist für die Überprüfung doch nicht zuständig

In dem dritten Fall wird die Anfrage an den folgenden Validator weitergeleitet, während die Überprüfung in den ersten beiden Fällen beendet wird.

2.4.3.1. Verwendung der Standard-Validatoren

Checkerberry db enthält die vier Standard-Validatoren TimeValidator, DateValidator, NumberValidator und StringValidator, die im Folgenden beschrieben werden.

TimeValidator (de.conceptpeople.checkerberry.common.validation.OperatorContainingTimeValidator)

Der TimeValidator wird verwendet, um Datumsangaben inkl. Uhrzeit zu prüfen. Zu diesem Zweck werden die zu vergleichenden Werte in java.util.Date-Objekte konvertiert und als Date verglichen. Dies führt z.B. dazu, dass die Werte „2010-01-01 12:00:00.001“ und „2010-01-01 12:00:00.1“ identisch sind, was bei einem Vergleich als reine Zeichenketten nicht der Fall wäre.

Der TimeValidator wird verwendet, wenn der erwartete Wert dem Muster [op] yyyy-MM-dd HH:mm:ss.S[SS] genügt, wobei op ein Operator ist. Die folgende Tabelle zeigt die Bedeutungen der Operatoren.

NameBedeutungBeispiel
ltKleiner als (less than)lt 2010-01-01 00:00:00.0 überprüft, ob der Wert in der Datenbank vor dem 01.01.2010 liegt.
leKleiner als oder gleich (less than or equal)le 2010-01-01 00:00:00.0 überprüft, ob der Wert in der Datenbank vor dem 01.01.2010 liegt oder ob er genau diesem Zeitpunkt entspricht.
gtGrößer als (greater than)gt 2010-01-01 00:00:00.0 überprüft, ob der Wert in der Datenbank hinter dem genannten Zeitpunkt liegt.
geGrößer als oder gleich (greater than or equal)ge 2010-01-01 00:00:00.0 überprüft, ob der Wert in der Datenbank hinter dem genannten Zeitpunkt liegt oder dem Zeitpunkt entspricht.
eqGleich (equal)eq 2010-01-01 00:00:00.0 überprüft, ob der Wert in der Datenbank genau dem genannten Zeitpunkt entspricht. Dies ist der Standard-Operator, wenn kein Operator explizit angegeben wurde.
neUngleich (not equal)ne 2010-01-01 00:00:00.0 überprüft, ob der Wert in der Datenbank nicht dem genannten Zeitpunkt entspricht.

DateValidator (de.conceptpeople.checkerberry.common.validation.OperatorContainingDateValidator)

Der DateValidator wird verwendet, um Datumsangaben ohne Uhrzeit zu prüfen. Zu diesem Zweck werden die zu vergleichenden Werte in java.util.Date-Objekte konvertiert und als Date verglichen. Dies führt z.B. dazu, dass die Werte „2010-01-01“ und „2010-01-01 00:00:00.0“ identisch sind, was bei einem Vergleich als reine Zeichenketten nicht der Fall wäre.

Der DateValidator wird verwendet, wenn der erwartete Wert dem Muster [op] yyyy-MM-dd genügt, wobei op ein Operator ist. Die folgende Tabelle zeigt die Bedeutungen der Operatoren.

NameBedeutungBeispiel
ltKleiner als (less than)lt 2010-01-01 überprüft, ob der Wert in der Datenbank vor dem 01.01.2010 liegt.
leKleiner als oder gleich (less than or equal)le 2010-01-01 überprüft, ob der Wert in der Datenbank vor dem 01.01.2010 liegt oder ob er genau diesem Datum entspricht.
gtGrößer als (greater than)gt 2010-01-01 überprüft, ob der Wert in der Datenbank hinter dem genannten Datum liegt.
geGrößer als oder gleich (greater than or equal)ge 2010-01-01 überprüft, ob der Wert in der Datenbank hinter dem genannten Datum liegt oder dem Datum entspricht.
eqGleich (equal)eq 2010-01-01 überprüft, ob der Wert in der Datenbank genau dem genannten Datum entspricht. Dies ist der Standard-Operator, wenn kein Operator explizit angegeben wurde.
neUngleich (not equal)ne 2010-01-01 überprüft, ob der Wert in der Datenbank nicht dem genannten Datum entspricht.

NumberValidator (de.conceptpeople.checkerberry.common.validation.OperatorContainingNumberValidator)

Der NumberValidator wird verwendet, um Zahlen zu prüfen. Zu diesem Zweck werden die zu vergleichenden Werte in java.math.BigDecimal-Objekte konvertiert und als BigDecimal verglichen. Dies führt z.B. dazu, dass die Werte „1.0“ und „1“ identisch sind, was bei einem Vergleich als reine Zeichenketten nicht der Fall wäre.

Der NumberValidator wird verwendet, wenn der erwartete Wert dem Muster [op] n.n genügt, wobei op ein Operator ist. Die folgende Tabelle zeigt die Bedeutungen der Operatoren.

NameBedeutungBeispiel
ltKleiner als (less than)lt 1.6 überprüft, ob der Wert in der Datenbank kleiner als 1.6 ist.
leKleiner als oder gleich (less than or equal)le 1.6 überprüft, ob der Wert in der Datenbank kleiner als oder gleich 1.6 ist.
gtGrößer als (greater than)gt 1.6 überprüft, ob der Wert in der Datenbank größer als 1.6 ist.
geGrößer als oder gleich (greater than or equal)ge 1.6 überprüft, ob der Wert in der Datenbank größer als oder gleich 1.6 ist.
eqGleich (equal)eq 1.6 überprüft, ob der Wert in der Datenbank gleich 1.6 ist. Dies ist der Standard-Operator, wenn kein Operator explizit angegeben wurde.
neUngleich (not equal)eq 1.6 überprüft, ob der Wert in der Datenbank ungleich 1.6 ist.

StringValidator (de.conceptpeople.checkerberry.common.validation.DefaultStringValidator)

Der StringValidator wird verwendet, um Werte als Zeichenkette zu vergleichen. Er erwartet kein besonderes Muster, sondern führt immer eine Validierung durch. Der StringValidator überprüft somit alle Werte, die nicht bereits zuvor durch einen anderen Validator überprüft wurden. Des Weiteren bedeutet dies, dass der StringValidator nur die beiden Ergebnisse „erfolgreiche Validierung“ oder „fehlerhafte Validierung“ verwendet.

DateBetweenValidator (de.conceptpeople.checkerberry.common.validation.OperatorContainingDateArrayValidator)

Der DateBetweenValidator gehört als optionaler Validator nicht zu den Standard-Validatoren. Aus diesem Grund muss er vor seiner Verwendung explizit registriert werden. Die Registrierung von Validatoren ist in Abschnitt 2.4.3.5, „Registrierung von Validatoren“ beschrieben.

Der DateBetweenValidator wird verwendet, um Datumsangaben ohne Uhrzeit innerhalb eines Intervalls zu prüfen. Zu diesem Zweck werden die zu vergleichenden Werte in java.util.Date-Objekte konvertiert und als Date verglichen.

Der DateBetweenValidator wird verwendet, wenn der erwartete Wert dem Muster btw nnnn-nn-nn, nnnn-nn-nn genügt. Der Validator prüft dann, ob der Wert in der Datenbank zwischen den beiden angegebenen Datumsangaben liegt. Die Grenzen des Intervalls können über folgende Operatoren konfiguriert werden:

  • [btw]: Der erwartete Wert darf auch dem Start- oder Enddatum entsprechen. Dieser Operator ist identisch mit btw ohne die Angabe der eckigen Klammern.

  • [btw[: Der erwartete Wert darf auch dem Startdatum aber nicht dem Enddatum entsprechen.

  • ]btw]: Der erwartete Wert darf auch dem Enddatum aber nicht dem Startdatum entsprechen.

  • ]btw[: Der erwartete Wert darf weder dem Start- noch dem Enddatum entsprechen.