5.3. Verzeichnis testen

Tests mit Verzeichnissen beginnen alle mit folgenden Methoden:

File folder = new File(folderName);
AssertThat.eachDocument()                  1 
          .inFolder(folder)                2 
          .passedFilter(filter)            3
          ...
;

1 2

Diese beiden Methoden sind der syntaktische Einstieg für Tests, die sich auf alle Dateien im angegebenen Verzeichnis beziehen, die die Dateiendung PDF haben. Der Vergleich auf die Dateiendung erfolgt case-insensitiv.

3

Mit einem (optionalen) Filter kann die Menge der zu testenden Dokumente eingeschränkt werden. Es können mehrere Filter verwendet werden. Ohne Filter werden alle PDF-Dokumente des Verzeichnisses getestet.

Ein Test bricht ab, sobald ein Dokument im Verzeichnis den Test nicht erfüllt.

Falls die Verwendung von Filtern dazu führt, dass kein Dokument mehr übrig bleibt, wird eine Fehlermeldung erzeugt. Ebenso gibt es einen Fehler, wenn das Verzeichnis keine Dokumente enthält.

Beispiel - Alle Dokumente im Verzeichnis validieren

Das folgende Beispiel testet, ob alle PDF-Dokumente im angegebenen Verzeichnis die ZUGFeRD-Spezifikation erfüllen:

@Test
public void filesInFolderCompliesZugferdSpecification() throws Exception {
  String folderName = PATH + "zugferd10";
  File folder = new File(folderName);
  AssertThat.eachDocument()
            .inFolder(folder)
            .compliesWith()
            .zugferdSpecification(VERSION10)
  ;
}

Beispiel - Ausgewählte Dokumente im Verzeichnisse validieren

Das nächste Beispiel überprüft den Titel aller PDF-Dokumente eines Verzeichnisses, die 'pdfunit-perl' im Namen enthalten:

@Test
public void validateFilteredFilesInFolder() throws Exception {
  File folder = new File(PATH);
  FilenameFilter allPdfunitFiles = new FilenameMatchingFilter(".*pdfunit-perl.*");
  AssertThat.eachDocument()
            .inFolder(folder)
            .passedFilter(allPdfunitFiles) 
            .hasProperty("Title").equalsTo("PDFUnit - Automated PDF Tests")
  ;
}

Es gibt zwei Arten von Filtern. Der Filter FilenameContainingFilter untersucht, ob ein Dateiname einen bestimmten String enthält, und der Filter FilenameMatchingFilter wendet einen Regulären Ausdruck auf den Dateinamen an. Wichtig: In beiden Fällen bezieht sich die Analyse des Dateinamens auf den vollständigen Namen, d.h. auch auf den Pfad. Deswegen sollte beispielsweise ein Regulärer Ausdruck immer mit '.*' beginnen.