Ich bin zu spät zur Party in Bezug auf die Verwendung von Unit-Testing ... versuchen, Best Practices und die so zu verstehen. Meine Frage ist, ob ich bei einer Klasse, die für das Erzeugen einer PDF (oder Doc / Html / Xml / etc.) Zuständig ist, wie würde ich gehen, um die endgültige Ausgabedatei zu testen, korrekt? Ich stelle eine textbasierte Datei (XML) dar, ich konnte nur sehen, ob die Zeichenfolgen übereinstimmen, aber was ist mit einer Binärdatei (pdf)? Soll ich nur gegen einen MD5-Hash überprüfen? Soll ich das überhaupt testen?
Vielen Dank im Voraus.
Ich benutze pdfbox , um Text aus generierten PDFs zu extrahieren und zu prüfen, ob es die gewünschten Daten enthält. Dies überprüft nicht, ob Daten an der richtigen Stelle sind, aber ich gehe nicht so tief mit PDF-Tests. Sie müssen denken, wie tief Sie gehen möchten, je tiefer Sie gehen, desto mehr Zeit werden Sie verbringen, um die Tests nach einer Änderung zu reparieren (ich hatte nie einen Fehler, dass Text an der falschen Stelle war und vielleicht teste ich das nicht).
Eine andere Möglichkeit wäre, die gleiche PDF-Bibliothek zu verwenden (Sie schreiben sie), um sie zu lesen oder etwas wie iText zu verwenden, wenn Sie PDF aus einer Vorlage unter Verwendung eines Frameworks generieren.
Wäre es ein Problem, wenn es nicht funktioniert hätte? Wenn ja, dann sollten Sie es testen.
Nun zur nächsten Frage, wie würde ein Dienstprogramm zum Vergleichen von binären Dateien zum Vergleichen von erwarteten und tatsächlichen PDFs funktionieren? Wenn ja, würde ich das verwenden.
Für geschäftskritische PDF-Dateien (z. B. solche, die an einen Kunden gesendet werden) glaube ich nicht, dass die Überprüfung des Textes ausreicht. Sie sollten Layout, Schriftgrößen, Textumbruch usw. überprüfen. Aus den gleichen Gründen verwenden wir Selenium, um Webseiten zu überprüfen.
Ich nahm den Ansatz, das PDF in ein Bild zu verwandeln und dieses Bild mit einem bekannten "korrekten" Bild zu vergleichen. Unsere PDFs haben sich nicht sehr oft geändert und enthalten nichts, was sich im Laufe der Zeit geändert hat (z. B. das "heutige" Datum). Dieser Ansatz funktionierte gut - mit den gleichen Eingabedaten konnten wir immer die gleiche Ausgabe PDF erzeugen.
Ich denke, dass PDFUnit nun eine integrierte Unterstützung dafür bietet, und noch viel mehr: Ссылка
Tags und Links language-agnostic unit-testing pdf