Die Ausführungsreihenfolge legt fest, in welcher Reihenfolge die
Validatoren bei der Überprüfung von Werten verwendet werden. Da bei
der Überprüfung nur Validatoren berücksichtigt werden, die in der
Ausführungsreihenfolge angegeben wurden, können Validatoren implizit
deaktiviert werden, indem sie in der Ausführungsreihenfolge nicht
angegeben werden. Die Ausführungsreihenfolge kann generell über das
DbConfigurationCallback
geändert werden. Diese
Änderungen wirken sich auf alle Tests aus. Das folgende Code-Beispiel
beschreibt die Methode der DbConfiguration.
Beispiel 2.10. Ausführungsreihenfolge von Validatoren (global)
public interface DbConfiguration { /** * Setzt die Ausführungsreihenfolge der Validatoren. Die * Ausführungsreihenfolge kann im * {@link de.conceptpeople.checkerberry.db.bridge.context.ValidatorContext} * für jede Testmethode geändert werden. * * @param validatorIdsInExecutionOrder * Validator-Ids in der gewünschten Ausführungsreihenfolge. * @see ValidatorContext#setValidatorIdsInExecutionOrder(ValidatorId...) */ void setValidatorIdsInExecutionOrder( ValidatorId... validatorIdsInExecutionOrder); }
Über den ValidatorContext
kann die
Ausführungsreihenfolge auch für einzelne Testmethoden überschrieben
werden. Der ValidatorContext
wird über den Aufruf
DbTestHandler.getValidatorContext()
zurückgeliefert. Das folgende Code-Beispiel enthält die entsprechende
Methode aus dem ValidatorContext
.
Beispiel 2.11. Ausführungsreihenfolge von Validatoren (lokal)
public interface ValidatorContext { /** * Setzt die Ids der Validatoren in der gewünschten Ausführungsreihenfolge * z.B. setValidatorIdsInExecutionOrder(executeAsFirstId, executeAsSecondId, * executeAsThirdId, ...). * * @param validatorIdsInExecutionOrder * Ids der Validatoren in der gewünschten Ausführungsreihenfolge. */ void setValidatorIdsInExecutionOrder( ValidatorId... validatorIdsInExecutionOrder); }
Die Ausführungsreihenfolge der Validatoren wird über die Methode
setValidatorIdsInExecutionOrder
festgelegt. Die
Methode erwartet eine Liste von Ids registrierter Validatoren. Wenn
die Liste die Id eines nicht registrierten Validators enthält, so
führt dies zu einer Exception, wenn der Validator bei der Überprüfung
eines Werts verwendet werden soll. Checkerberry db geht immer davon
aus, dass für jede Validator-Id ein entsprechender Validator
registriert ist. Soll ein Validator bei einer Prüfung nicht
berücksichtigt werden, kann er jedoch deaktiviert werden. Deaktivierte
Validatoren werden bei der Überprüfung von Werten ignoriert.
Die Anpassung der Ausführungsreihenfolge über den
ValidatorContext
wirkt sich auf alle Tabellen und
Spalten aus. Es gibt jedoch auch die Möglichkeit, die
Ausführungsreihenfolge für einzelne Tabellenspalten zu
konfigurieren.
Beispiel 2.12. Ausführungsreihenfolge von Validatoren pro Tabellenspalte
public interface DatabaseTableDescription { /** * Setzt die Ids der Validatoren in Ausführungsreihenfolge für die * angegebene Spalte. Bei der Validierung von Werten zu dieser Spalte, * werden ausschließlich die in dieser Liste definierten Validatoren in der * vorgegebenen Reihenfolge verwendet. * * @param columnName * Name der Spalte, dessen Validatoren definiert werden sollen. * @param validatorIdsInExecutionOrder * Ids der zu verwendenden Validatoren in der gewünschten * Ausführungsreihenfolge. */ void setValidatorIdsInExecutionOrder(String columnName, ValidatorId... validatorIdsInExecutionOrder); }
Innerhalb der Tabellenbeschreibungen kann die
Ausführungsreihenfolge der Validatoren für einzelne Spalten definiert
werden. Dies ist sinnvoll, wenn sehr spezielle Validatoren existieren,
die nur für wenige Werte sinnvoll einsetzbar sind. Der Zugiff auf die
Tabellenbeschreibung erfolgt über
DbTestHandler.getDatabaseDescription().getTableDescription(String
tableName)
.
Bei der Standardbelegung der Ausführungsreihenfolge ist sichergestellt, dass für jeden zu überprüfenden Wert ein Validator vorhanden ist. Durch die Deaktivierung von Validatoren und die Anpassung der Ausführungsreihenfolge kann dieser Sachverhalt nicht mehr sichergestellt werden. Tritt bei der Überprüfung eines Wertes die Situation ein, dass kein zuständiger Validator gefunden wird, wird eine Exception geworfen.