Frage

Wie testen Sie, wenn kompilierten Code die erwartete Ausgabe zurückgibt oder nicht wie erwartet?

Ich habe unten ein funktionierendes Beispiel gearbeitet, aber es ist nicht leicht erweiterbar. Jeder weiterer Test würde zusätzliche Verschachtelung Klammern erfordern. Natürlich kann ich geteilt diese in andere Dateien, aber haben Sie Vorschläge, wie dies zu verbessern ?. Auch plane ich, dies zu verwenden, um von make test Strophe in einer Make-Datei, so dass ich nicht erwarten, dass andere Menschen etwas zu installieren, die nicht standardmäßig installiert ist, nur für sie zu testen. Und stdout sollte auch mit Stderr verschachtelt bleiben.

vereinfachtes Beispiel:

./testFoo || echo execution failed

./testBar && echo expected failure

(./testBaz && (./testBaz 2>&1 | cmp -s - foo.tst && ( ./testFoo && echo and so on 
     || echo testFoo's execution failed )|| echo testBaz's does not match   )
  || echo testBaz's execution failed

meine aktuellen Tester sieht wie folgt aus (für einen Test):

\#!/bin/bash
compiler1 $1 && (compiler2 -E --make $(echo $1 | sed 's/^\(.\)\(.*\)\..*$/\l\1\2/') && (./$(echo $1 | sed 's/^\(.\)\(.*\)\..*$/\l\1\2/') || echo execution failed)  || less $(echo $1 | sed 's/^\(.\)\(.*\)\..*$/\l\1\2/').err) || echo compile failed
War es hilfreich?

Lösung

Ich schlage vor, für Muster hier zu Beginn der Suche. Zum Beispiel könnten Sie den Dateinamen als Muster verwenden und dann einige zusätzliche Dateien erstellen, das das erwartete Ergebnis kodieren.

Sie können dann ein einfaches Skript verwenden Sie den Befehl, und überprüfen Sie das Ergebnis (statt Wiederholung des Tests Code immer wieder).

laufen

Zum Beispiel kann eine Datei testFoo.exec mit dem Inhalt 0 bedeutet, dass sie (oder zumindest Rückkehr mit 0) gelingen muss, während testBar.exec 1 enthalten würde.

textBaz.out enthält dann die erwartete Ausgabe. Sie brauchen nicht testBaz mehrmals zu nennen; Sie können die Ausgabe in dem ersten Anruf umleiten und dann Blick auf $?, um zu sehen, ob der Anruf oder nicht erfolgreich ist. Wenn ja, dann können Sie direkt die Ausgabe überprüfen (ohne den Befehl erneut zu starten).

Andere Tipps

Mein eigener einfältig Prüfkabelbaum funktioniert wie folgt:

  • wird jeder Test durch einen Bash-Skript mit einer Erweiterung dargestellt .test - diese alle im gleichen Verzeichnis leben

  • wenn ich einen Test zu erstellen, führe ich das Testskript und untersuchen Sie die Ausgabe vorsichtig, wenn es gut aussieht geht es in ein Verzeichnis namens good_results, in einer Datei mit dem gleichen Namen wie der Test, der es erzeugt

  • das Haupttestskript findet alle .test Skripte und führt jeder von ihnen wiederum eine temporäre Ausgabedatei zu erzeugen. Dies wird mit der diff'd passende Datei im Verzeichnis good_results und Unterschiede gemeldet

Itv dauerte etwa eine halbe Stunde zu schreiben und bekommen es funktioniert, aber es hat sich als von unschätzbarem Wert!

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