4.4.3. Eigene User Story-Parser schreiben

Wie bereits in den vorherigen Kapiteln erwähnt, lassen sich dem checkerberry-atdd-maven-plugin eigene Parser hinzufügen. Voraussetzung dafür ist, dass der Parser das Interface de.conceptpeople.checkerberry.atdd.common.io.UserStoryParser aus der Library checkerberry-atdd-common.jar implementiert. In dem folgenden Codebeispiel ist das vollständige Interface dargestellt.

Beispiel 4.12. UserStoryParser-Interface

public interface UserStoryParser {

  /**
   * Liest User Stories ein.
   * 
   * @param properties
   *            eine Map mit Parsereinstellungen
   * @return eine Liste von <code>UserStory</code>-Objekten. Werden keine
   *         User Stories gefunden, wird eine leere Liste zurückgegeben.
   * @throws UserStoryParseException
   *             verursacht durch einen Parserfehler
   */
  List<UserStory> parse(Map<String, String> properties) 
    throws UserStoryParseException;
}


Das Interface definiert die Methode parse(Map<String, String> properties) mit einer Liste von UserStory-Objekten als Rückgabewert. Über den Parameter properties werden dem Parser alle in der pom definierten Properties übergeben.

Da damit gerechnet werden muss, dass ein Parser falsch oder nur unvollständig konfiguriert sein kann, sollten für die notwendigen Properties Standardwerte gesetzt werden bzw. eine entsprechende Fehlerbehandlung vorhanden sein. Dabei sollten alle Exceptions innerhalb der parse-Methode gefangen oder durch die UserStoryParseException gekapselt werden.

Beim Parsen der User Stories ist zu vermeiden, dass Stories doppelt eingelesen werden. Dies könnte zu einer falschen Auswertung des Projektfortschritts führen. Da bei der Verwendung des checkerberry-atdd-maven-plugin mehrere Parser zum Einsatz kommen können, ist außerdem darauf zu achten, dass die Parser disjunkte Mengen von User Stories einlesen. Im Falle eines File-Parser muss daher der zugehörige File-Filter so angepasst sein, dass nur die betreffenden User Stories eingelesen werden.

Sind für einen angegebenen Parser keine User Stories vorhanden, ist gefordert, dass dieser eine leere Liste von UserStory-Objekten zurückliefert.

Bei dem UserStory-Objekt handelt es sich um ein einfaches POJO, dessen Konstruktor fünf Parameter erwartet. Die ersten vier Parameter enthalten notwendige Informationen und dürfen daher nicht NULL sein.

Beispiel 4.13. Konstruktor der UserStory-Klasse

/**
 * 
 * Erzeugt eine neue UserStory Instanz.
 * 
 * @param id
 *            Identifikator der User Story
 * @param name
 *            Name der User Story
 * @param sprint
 *            Der Sprint in dem die User Story umgesetzt werden soll
 * @param priority
 *            Priorität der User Story
 * @param acceptanceTests
 *            Die Schlüsselwerte der Map entsprechen den Schlüsselwerten der 
 *            identifizierten Akzeptanztests. Der Wert in der Map entspricht  
 *            der Akzeptanztest-Beschreibung. Da die Beschreibung optional ist,   
 *            kann der Wert NULL oder leer sein.
 */
 public UserStory(String id, String name, String sprint, String priority, 
   Map<String, String> acceptanceTests) {
   ...
}