How to unit-test-eine Methode, die läuft in einer Endlosschleife für eine Eingabe?
Diese Frage kam mir in den Sinn und ich möchte Fragen diese hier.
Fall ist Absicht, ich Schreibe einfach eine Schleife, die läuft unendlich. Wie kann ich das Gerät testen?
Ich Frage das, weil diese situation kann auftreten, überall in den code. Sagen, dass meine Methode die Delegierten mehrere andere Methoden, und ich möchte wissen,
- Wie es lief in einer Endlosschleife
- Was von input verursacht es
- Rufen Sie an, welche Methode (diese Methode) der dies verursacht hat
Habe ich keinen code für dieses. Die Frage ist rein nach wissen Willen, was ist zu tun, wenn diese situation entsteht, in der Zukunft. Bitte reagieren.
- Ist die Endlosschleife gewollt? Auch google "Halteproblem".
- Darf ich wissen, der Grund von dem, der Sie gebeten hat, diese Frage verschlossen werden, warum, um es zu schließen?
- jup so ist es gewollt. Dieses kam zu meinem Kopf, wenn ich dachte dabei an eine situation, wo dies passieren könnte
- Wann ist es eigentlich abrufen Ergebnis von dieser Methode?
- Ich bearbeitet meine Frage. Bitte Antworten
- können Sie sich eine Beispiel?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie testen, die fast das Gegenteil: "Wie unit test eine Methode, so dass die Methode nicht ausgeführt wird mehr als Xxxx Millisekunden für einige input". Wenn dieser test fehlschlägt, können Sie gefunden haben, einen Kandidaten mit einer unendlichen Schleife.
NUnit 2.5 hat eine TimeoutAttribute das macht ein test schlägt fehl, wenn der test dauert länger als die angegebene Zeit von Millisekunden.
Haben die Funktion, die Schleifen Delegierten der Schleife überprüfen, um zu einer injizierten Abhängigkeit:
Können Sie testen, dass es die Delegierten der Schleife überprüfen, um die
IShouldLoop
Abhängigkeit jeder Zeit, und Sie können Steuern, die Schleife in Ihrem test, so dass es nur Schleifen, die Anzahl der Zeiten, die Sie wollen. In der Produktionsumgebung, instanziieren es mit einer Instanz vonIShouldLoop
dass immer true zurück.LoopCondition
undisTrue()
mehr Sinn machen.Ich hoffe, du meinst eine Art von Nachricht-Pumpe/event-handling-Schleife. (Die meisten Endlosschleifen sind schlecht).
Ich würde sicherstellen, dass die Schleife, die Delegierten zu einer Klasse, welche Prozesse den input. Testen Sie diese Klasse gründlich.
Die Wahrscheinlichkeit, eine Schleife zu konstruieren, scheitern an Arbeit ist minimal.. Also ich würde das ausprobieren, über eine Abnahme oder manuell.
Dies ist etwas ähnlich wie die Prüfung der Main-Funktion eines Programms. Der trick hier ist, auch dafür zu sorgen, dass Haupt-Delegierten zu einer testbare Klasse.
Zweck unitesting ist zu testen, die meisten einfache Einheit in Ihrem Programm.
Meisten einfache Gerät ist in der Regel eine Funktion, die nicht eine einzige mission, so um unitest Ihrer unendlichen Schleife haben Sie zu extrahieren jede einzelne mission dieser Schleife tun können, in eine eigene Funktion, die aufgerufen werden können, allein, einmal getan werden Sie in der Lage, diese Funktionen aufrufen Ihnen alle möglichen parameter, um zu testen, verschiedene Szenarien Ihre Funktion sollte in der Lage sein zu handhaben. Die endlos-Schleife als eine Funktion nicht haben, werden unitested, aber der kleinere Missionen innerhalb der it.