Angenommen, Sie haben ein Projekt, das PDF-Dokumente erzeugt und möchten sicherstellen, dass die beteiligten Programme das tun, was sie sollen. Und angenommen, ein Test-Dokument soll genau eine Seite umfassen sowie die Grußformel „Vielen Dank für die Nutzung unserer Serviceleistungen“ und die Rechnungssumme von „30,34 Euro“ enthalten. Dann testen Sie diese Anforderungen so:
use strict;
use utf8;
use warnings;
use PDF::PDFUnit;
use Test::Exception;
use Test::More;
my $resources_dir = ...; # let it point to the base folder of your test data
my $pdfUnderTest = "$resources_dir/quickstart/quickstartDemo_en.pdf";
#
# Testcase 'has one page'
#
lives_ok {
AssertThat
->document($pdfUnderTest)
->hasNumberOfPages(1)
;
} "has one page";
lives_ok {
my $expectedGreeting = "Vielen Dank für die Nutzung unserer Serviceleistungen";
AssertThat->document($pdfUnderTest)
->restrictedTo(LAST_PAGE)
->hasText()
->containing($expectedGreeting)
;
} "has greeting";
#
# Testcase 'has expected charge'
#
lives_ok {
my $upperLeftX = 172; # in millimeter
my $upperLeftY = 178;
my $width = 20;
my $height = 9;
my $regionCharge = PageRegion->new($upperLeftX, $upperLeftY, $width, $height);
AssertThat->document($pdfUnderTest)
->restrictedTo(LAST_PAGE)
->restrictedTo($regionCharge)
->hasText()
->containing('29,89') # Let's see an error message. Correct value: 30,34
;
} "has expected charge";
diag $@->getMessage() if $@;
done_testing();
Die Anweisung diag $@->getMessage() if $@
sorgt dafür, dass
Fehlermeldungen von PDFUnit-Java angezeigt werden. Für den provozierten Fehler
im letzten Test sieht die Fehlermeldung folgendermaßen aus:
# Failed test 'has expected charge' # at C:/.../examples_quickstart-de.t line 67. # died: main::com::pdfunit::errors::PDFUnitValidationException=HASH(0x4055938) # Page(s) [1] of 'C:\...\quickstartDemo_de.pdf' # not containing the expected text: '29,89 Euro'. Found: '30,34 Euro'.
So einfach geht's. Die folgenden Kapitel zeigen den Funktionsumfang, die Installation und typische Beispiele für die Verwendung von PDF::PDFUnit.