Ich entwickle eine Anwendung, die mit CTRL-C arbeitet. Ich produziere einen Signal-Handler, um Threads und andere Ressourcen ordnungsgemäß herunterzufahren.
Ich möchte CTRL-C in verschiedenen Szenarien testen, in denen meine Anwendung sein könnte. Ich weiß, wie man diese für den zu testenden Prozess einrichtet, aber ich brauche einen Weg (im Code der laufenden Testsuite), um zu überprüfen, ob diese Bedingung erreicht ist oder nicht, um genau CTRL-C aufzurufen.
Ich arbeite unter Linux und möchte meine Tests automatisch mit Hilfe von CPPUNIT
ausführen. In jedem meiner CTRL-C-Tests starte ich den Prozess und dann sende ich STRG-C mit kill
-Funktion mit der PID des Prozesses.
Ich benutze geteilten Speicher; Sobald die getestete Anwendung einen Zustand erreicht, der für mich von Interesse ist, oder einen Punkt, an dem ich CTRL-C senden möchte, schreibe ich ein Tag oder einen Zustand in den gemeinsamen Speicher. Zur gleichen Zeit wird der Test-Suite-Code, der in einem anderen Prozess läuft, fortlaufend den gemeinsamen Speicher abfragen und sobald er den gewünschten Status liest, sendet er STRG-C / kill.
Glauben Sie, dass dies ein guter Ansatz ist oder in der Regel auf bessere / effektivere Weise geschieht?
Mit freundlichen Grüßen
AFG
Das erste Testen des Verhaltens, wenn ein externes Signal empfangen wird, sieht nicht wie ein Komponententest aus, sondern wie ein Funktionstest.
Auch klingt die Art und Weise, wie Sie es tun, zu kompliziert und zwingt Sie wahrscheinlich zu einer Art Synchronisierung und versteckt einige Verhaltensweisen.
Auf der anderen Seite habe ich nicht wirklich etwas Besseres für diese Art von Tests vorzuschlagen, dies wird normalerweise durch externe Tools in viel weniger kontrollierter Weise durchgeführt.
Führe eine Ebene der Indirektion ein.
Program
). shutdown()
-Methode bereitstellen, die alle Herunterfahrvorgänge außer dem Aufruf von std::exit()
ausführt. shutdown()
Methode wie jede andere Methode. shutdown()
-Methode für das static
Program
-Objekt delegieren, das Ihr gesamtes Programm repräsentiert, und dann auf call std::exit()
. Dies ist der einzige Teil, den Sie nicht testen können. Tags und Links unit-testing c++ testing signals