Komponententest für CTRL-C an eine Anwendung gesendet

8

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

    
Abruzzo Forte e Gentile 21.12.2010, 15:22
quelle

2 Antworten

5

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.

    
kriss 21.12.2010, 15:43
quelle
2

Führe eine Ebene der Indirektion ein.

  1. Platziere deinen Programmcode auf höherer Ebene hinter einer Fassade (ich benutze eine Klasse namens Program ).
  2. Lassen Sie diese Fassade eine shutdown() -Methode bereitstellen, die alle Herunterfahrvorgänge außer dem Aufruf von std::exit() ausführt.
  3. Testen Sie die shutdown() Methode wie jede andere Methode.
  4. Lassen Sie den Signal-Handler auf diese 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.
Raedwald 21.12.2010 17:23
quelle

Tags und Links