2017-05-13 4 views
2

Ich habe ein Makefile zum Kompilieren einer statischen Bibliothek. Dieses Makefile enthält eine Regel zum Kompilieren einer Komponententestsuite, die der statischen Bibliothek zugeordnet ist. Sobald die Testsuite kompiliert ist, wird ein Python-Skript aufgerufen, um die Tests auszuführen und die Ergebnisse zu protokollieren. Es sieht so aus:Lassen Sie scheitern, wenn Komponententests fehlschlagen

unit: 
    $(MAKE) -C cXbase/unit 
    python $(TESTS_RUNNER) $(UNIT_TESTS_EXEC) $(UNIT_TESTS_LOG) 

Ich benutze Python, um die Tests Aufruf portabel. Im Moment läuft alles gut: Die Tests kompilieren und der Test Runner wird aufgerufen und protokolliert alles richtig in Linux und Windows. Nur wenn ein Test fehlschlägt, möchte ich den gesamten make-Prozess stoppen und einen Fehler zurückgeben. Genauer möchte ich nicht make all oder make unit, wenn ein Komponententest fehlschlägt (oder viele).

Wenn ein Komponententest fehlschlägt, gibt das Python-Skript einen bestimmten Beendigungscode zurück. Ich möchte in einem tragbaren Weg erfassen können und haben Fehler, wenn dieser Exit-Code erfasst wird.

Hättest du irgendwelche Empfehlungen, wie das geht? Ich habe nirgendwo überzeugend oder tragbar gefunden.

Danke

+1

Sprechen Sie über einen * Rückgabewert * oder einem * Exit-Code *? – Beta

+0

Make wird abgebrochen, wenn ein Befehl in einem Rezept einen Nicht-Null-Exit-Status gibt. Wenn das nicht gut genug ist, müssen wir den Exit-Status * innerhalb des Befehls * erfassen und die Frage lautet: "Wie tragbar ist Portable genug?" ** Ich weiß, wie man es in bash erfasst und testet; Interessierst du dich für andere Muscheln? – Beta

+0

@Beta Ich möchte es in bash und cmd (Windows) arbeiten – BobMorane

Antwort

0

Es scheint die Lösung war viel einfacher als ich mir vorgestellt habe. Der Python-Exit-Code spiegelt direkt in make seinen Exit-Code wider. Mit anderen Worten, wenn das Skript fehlschlägt (Exit-Code ungleich 0), sieht make dies als einen Befehlsfehler und stoppt.

Ich hatte einen Fehler in meinem Python-Skript-Exit-Code-Behandlung bei Tests fehlgeschlagen, die das von mir versteckt. Jetzt ist es gelöst und es funktioniert perfekt.

fand ich dies aus über hier: Handling exit code returned by python in shell script

Verwandte Themen