Von einer Perl-Testdatei, wie kann ich überprüfen, um den Inhalt einer Datei?

StackOverflow https://stackoverflow.com/questions/2543325

  •  23-09-2019
  •  | 
  •  

Frage

Ich möchte ein Skript testen ich in Perl geschrieben und speziell überprüfen, was zur Ausgabe in Datei schreibt. Ich schrieb es vor einiger Zeit und will nicht, es in den Umfang ändern es in ein Modul eingeschaltet werden, aber es Regressionstest möchte, bevor einige kleine funktionelle Veränderungen hinzufügen.

Bisher habe ich

use Test::Command tests => 10;

exit_is_num($cmd, 0);
....

Aber der Befehl erzeugt einige Dateien und ich möchte diese Dateien überprüfen, die gleichen sind, wie ich erwarten (entweder gleich oder etwas regexp übereinstimmen). Irgendwelche Vorschläge

War es hilfreich?

Lösung

Es gibt nichts Magisches an einem Test. Lesen Sie die Dateien in, überprüfen sie die richtigen Inhalte haben. Biege einfach.

open my $fh, $file;
my $have = join '', <$fh>;

is $have, <<'WANT', "contents of $file";
The quick brown fox
jumped over the lazy grey dog.
WANT

Nichts Boden dort zu brechen. Test :: File :: Inhalt werden Sie mit einigen Utility-Funktionen zur Verfügung stellen so müssen Sie sich nicht, dass über schreiben und immer wieder.

Wenn Sie eine Reihe von Dateien sind testen, können Sie die Prozessdaten angetrieben werden.

my %file_tests;
$file_tests{"expected_filename"} = <<'WANT';
Expected content
WANT
... and so on ...

for my $file (keys %file_tests) {
    my $want = $file_tests{$file};

    file_contents_is($file, $want, "contents of $file");
}

Wenn der Inhalt groß sind Sie möglicherweise die erwartete Ausgabe in Dateien und die Verwendung files_contents_identical Stick ().

Schließlich, wenn Sie sicher, dass das Programm machen wollen, nur die Dateien erzeugen Sie erwarten, und es gibt keine Streuner, machen ein temporäres Verzeichnis, chdir in dem das Programm von dort ausführen und überprüfen Sie das Verzeichnis nur die Dateien enthält, die Sie erwarten . Ich lasse das als eine Übung für den Leser.

Andere Tipps

OK, werde ich mit dem Brute-Force-DIY-Ansatz gehen (aber es ist möglich, es gibt bereits einige Testmodul mit Dateiprüfung API - ich einfach nie in eine so flexibel gestoßen / generic als das, was wir brauchten und sie geschrieben und nie der Filz zwingende Notwendigkeit zu suchen tiefer :).

Ich werde eine ziemlich generische Testaufbau beschreiben, können Sie wollen / müssen nur ganz bestimmte Datei Aspekte der es zu testen.

Was wir in diesem Fall zu tun ist buchstäblich, was Ihre funktionale Spezifikation über Zuständen, als Teil des gesamten Test-Framework:

  • Haben Sie eine Testbibliothek mit zwei Methoden (unter anderem) - test_file_identical() und test_grep_file() . Wenn Sie Hilfe brauchen, um diese beiden zu schreiben, dann schreiben Sie einen Kommentar und ich werde einige Hinweise bieten (wir verschiedene Komparatoren verwenden, einschließlich einer Kombination von -e, Vergleiche verschiedener stat Attribute, Content-Strings der getesteten Datei im Vergleich zur Benchmark-Datei über File::Slurp erhalten Vergleich und tut grep die Datei, Zeile für Zeile oder über schlürfte Inhalte für kleine Dateien, einschließlich Vergleich der massierten grep Ergebnisse einer Benchmark-Datei.

  • Fälle Haben Sie Ihre Tests organisiert in Unterverzeichnissen (oder tarballs), eine pro-Test, und jeder Test besteht aus zwei Verzeichnisse -. Eingabedateien und erwartete Ausgabedateien

  • Haben Sie die Test-Engine-Skript Schleife über Testfälle (die für uns sind Meta-beschrieben entweder durch eine Perl-Datenstruktur oder besser noch, eine XML-Datei, so Business-Analysten mit ihnen Geige können, wenn erforderlich).

  • Wenn ein Testfall gibt an, dass die Testanforderungen (genau oder über grep) Übereinstimmen, die Test-Engine entsprechende Dateien finden (entweder hartcodierte Namen oder Muster über Namen im Testfall angegeben) gilt diese Datei Testverfahren in dem ersten Aufzählungspunkt genannte

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top