![]() | |||||||||
|
Threads testenDer folgende Text ist eine Ergänzung zu Abschnitt 5.6
Threads testen Auf Seite 114 wurde beschrieben, wie der Rückgabewert eines Threads mit Hilfe von Thread.sleep(int) ermittelt werden kann. Die dargestellte Lösung wurde dort wegen ihrer Nebenwirkungen als Antipattern gekennzeichnet. Weil die Darstellung in Listing 5.10 unvollständig ist, hier das komplette Listing 5.10 samt der zu testenden Thread-Klasse MyService (fett gedruckt das Original-Listing aus dem Buch): 1 import junit.framework.*; Die Klasse MyService implementiert keine sinnvolle Funktionalität, sie dient nur zur Veranschaulichung. Wichtigste Anmerkung zum obigen Listing: Die Zusicherung (siehe Zeile 10) muss im selben Thread wie die JUnit-Testklasse liegen! Eine Zusicherung in Klasse MyService hat keine direkte Auswirkung auf JUnit, lässt also keinen Test scheitern. Weiterhin: Der Thread in Klasse MyService (ab Zeile 22) muss direkt nach Konstruktion gestartet werden (siehe Zeile 36). Normalerweise schlägt der Test fehl (je nach Systemkonfiguration). Erhöht man die Sleep-Zeit in Zeile 9 von 1000 auf 2000, sollte der Test nicht mehr fehlschlagen. Wie schon im Buch beschrieben, sollte diese Variante nicht verwendet werden, weil die Zeit, die beim Aufruf von Thread.sleep(...) einzusetzen ist, nicht exakt bestimmt werden kann. Dies führt unweigerlich zu zu langen Wartezeiten, was sich negativ auf die Laufzeit der Tests auswirkt. Je nach Systemkonfiguration (Hardware, Betriebssystem, laufende Prozesse) fällt die minimal benötigte Sleep-Zeit zudem unterschiedlich aus! |
||||||||
|