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:
TimeValidator
DateValidator
NumberValidator
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:
die Werte sind gemäß der speziellen Prüfung identisch
die Werte sind gemäß der speziellen Prüfung unterschiedlich
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.
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.
Name | Bedeutung | Beispiel |
---|---|---|
lt | Kleiner 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. |
le | Kleiner 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. |
gt | Größ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. |
ge | Größ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. |
eq | Gleich (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. |
ne | Ungleich (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.
Name | Bedeutung | Beispiel |
---|---|---|
lt | Kleiner als (less than) | lt 2010-01-01 überprüft, ob der
Wert in der Datenbank vor dem 01.01.2010 liegt. |
le | Kleiner 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. |
gt | Größer als (greater than) | gt 2010-01-01 überprüft, ob der
Wert in der Datenbank hinter dem genannten Datum
liegt. |
ge | Größ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. |
eq | Gleich (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. |
ne | Ungleich (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.
Name | Bedeutung | Beispiel |
---|---|---|
lt | Kleiner als (less than) | lt 1.6 überprüft, ob der Wert in
der Datenbank kleiner als 1.6 ist. |
le | Kleiner 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. |
gt | Größer als (greater than) | gt 1.6 überprüft, ob der Wert in
der Datenbank größer als 1.6 ist. |
ge | Größ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. |
eq | Gleich (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. |
ne | Ungleich (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.