2.4.3.3. Anpassen der Ausführungsreihenfolge von Validatoren

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.