Wiederherstellen von Ausnahmen mit CPPUnit
-
03-07-2019 - |
Frage
Ich habe CPPUnit als Einheit Test-Framework wurde mit und jetzt versuchen es in einem automatisierten Build und Paketsystem zu verwenden. Doch ein Problem hält mich zurück, dass, wenn ein Absturz auftritt während des Laufs der Unit-Tests, z.B. eine Null-Zeiger-Dereferenzierung, es den Rest der Automatisierung hält.
Gibt es eine Möglichkeit für CPPUnit von Ausnahme zu erholen, die Testfehler aufnehmen und besteht dann graziös anstatt das Gerät zu testen Prozess beendet wird? Auch ein Ansatz spezifisch für Null-Zeiger-Dereferenzierung wäre nützlich, als dass etwa 90% der Ausgaben macht die ich je hatte.
Um technologiespezifische, ich bin mit Makefiles auf einem Windows-System.
Lösung
Sie automatisieren die Ausführung Ihrer cppunit basierten Einheit-Tests während des Build-Prozesses, nicht wahr?
Wenn Sie CppUnit zu benutzen versuchen, den Build-Prozess auszuführen, würde ich versucht sein zu sagen, dass das nicht tun!
Könnten Sie uns sagen, was den Build-Prozess wird beendet, wenn die Unit-Tests zum Absturz? Und was ist Ihre Unit-Tests gestartet, indem ein Makefile, ein Skript von Ihrer eigenen, oder ein kontinuierlicher Integration Rahmen ?
Um zu versuchen, Ihre Frage zu beantworten, kann CppUnit nicht aus der Verletzung oder Segmentierungsfehlern erholen. Auf Unix-ähnlichen Systemen sollten Sie in der Lage sein, den SIGSEGV zu fangen und fortzusetzen, und in dem Zustand ?
Wenn Sie Ihre Abstürze in Ihrem Gerät zu testen auftreten und nicht in dem Produkt, dann würde ich Ihnen empfehlen, auf
Andere Tipps
Es tut uns Leid, dies zu sagen, aber die bisherigen Antworten Sie auf diese eingegangen sind lächerlich. cppunit fehlt wirklich in dieser Hinsicht. cppunit sollte einen EXIT_ON_FAIL Makro implementieren, die Ihnen zu stoppen in den Fenstern die Zugriffsverletzung ermöglicht (mit SetUnhandledExceptionFilter), dann können Sie jeden Bereinigungs tun und läßt cppunit die Fehler über EXIT_ON_FAIL melden. Dann nach der Meldung, die Anwendung beenden.
In C / C ++, der beste Weg, um Fehler zu beheben, wie das ist jeden Test in einem separaten Prozess laufen zu lassen und sie dann von einem übergeordneten Prozess überwachen. Dies ist sehr einfach in UNIX - nur fork (), bevor der Test beginnt. überprüfen dies unterstützt, und Sie wahrscheinlich Patch CPPUnit dieses Verhalten ohne viel Aufhebens zu haben.
Als zusätzliche Anmerkung zu jemandem später dieser Frage durchlesen, die ich gefunden habe Unittest ++ können Ausnahmen in Tests fangen und nur den Test mit entsprechenden Informationen nicht eher als in einem Prozess Ausgang führt.
Ich habe es nicht ausprobiert, aber wenn in Windows, ich denke, würde die Verwendung SEH helfen:
__try
{
// running your case
}
__except
{
}
Integration in die CppUnit Rahmen, und jedes Mal eine unbekannte Ausnahme erhalten, den Fall markieren, wie fehlschlagen.