Abrufen einer TimerTask, die bei Verwendung von JUnit ausgeführt werden soll

8

Ich habe eine Funktion, die so aussieht:

%Vor%

Ich versuche, JUnit-Tests für meinen Code zu schreiben, und sie verhalten sich beim Testen dieses Codes nicht wie erwartet. Durch die Verwendung von EclEmma kann ich sehen, dass meine Tests die Funktion doSomethingElse() nie berührt haben.

Wie schreibe ich Tests in JUnit, die lange genug warten, bis% code_% beendet ist, bevor Sie mit dem Test fortfahren?

    
John 03.11.2013, 04:49
quelle

3 Antworten

1

Sie können Thread.sleep(1000) in Ihrem Test verwenden.

    
Stefan Birkner 03.11.2013, 07:11
quelle
6

Sie können so etwas tun:

%Vor%

Die CountDownLatch#await() -Methode blockiert den aktuellen Thread, bis countDown() mindestens so oft aufgerufen wurde wie bei der Konstruktion angegeben wurde, in diesem Fall einmal. Sie können Argumente für await() angeben, wenn Sie eine maximale Wartezeit festlegen möchten.

Weitere Informationen finden Sie hier: Ссылка

    
CtrlF 08.11.2013 00:27
quelle
2

JUnit ist nicht wirklich so eingerichtet, dass Multithread-Code ausgeführt wird. Wenn der Haupt-Thread beendet wird, werden alle anderen Threads gestoppt. Mit anderen Worten, wenn Ihr Thread-Scheduler nicht zu dem Thread wechselt, der den neuen TimerTask ausführt, bevor er von Ihrer @Test -Methode zurückkehrt, wird er nur diesen Thread beenden und die JVM beenden, so dass Ihre Methode nie ausgeführt wird.

Sie können entweder ein Thread.sleep(long) wie von Stefan vorgeschlagen setzen oder ein anderes Design verwenden, möglicherweise ein ScheduledThreadPoolExecutor , wo Sie awaitTermination mit einem Timeout-Wert haben können.

    
Sotirios Delimanolis 03.11.2013 13:07
quelle

Tags und Links