Ich versuche, eine Methode zu testen, die es Arbeit in einem separaten Thread der Fall ist, vereinfacht es so ist:Wie man auf einen Thread wartet, der seinen eigenen Thread hervorbringt?
public void methodToTest()
{
Thread thread = new Thread()
{
@Override
public void run() {
Clazz.i = 2;
}
};
thread.start();
}
In meinem Gerät zu testen möchte ich, dass 2 == Clazz.i testen, aber ich kann tue dies, weil ich denke, dass die Assert ausgeführt wird, bevor der Thread den Wert ändert. Ich dachte daran, einen anderen Thread zu verwenden, um es zu testen und dann mit Join zu warten, aber es funktioniert immer noch nicht.
SSCCE:
@Test
public void sscce() throws InterruptedException
{
Thread thread = new Thread()
{
@Override
public void run() {
methodToTest()
}
};
thread.start();
thread.join();
AssertEquals(2, Clazz.i);
}
public static class Clazz
{
public static int i = 0;
}
Ich denke, das liegt daran, dass der Test Haupt-Code, um einen Thread erstellt, die (verbunden) mit dem zweiten Thread warten, aber der zweite Thread die Arbeit nicht tun, schafft es eine andere Thread, um die Arbeit zu tun und dann beendet, die den ersten Thread fortsetzt, während der dritte Thread die Clazz.i = 2
nach der Assertion macht.
Wie kann ich es so machen, dass der erste Thread wartet auf den Thread, der sowie alle Threads gestartet wird, die dieser Thread startet?
Fügen Sie join() im Haupt-Thread und im zweiten Thread hinzu –
@ravindra Ich habe einen Join im ersten Thread mit dem 2. Thread, direkt über dem assertEquals – Aequitas
http://Stackoverflow.com/questions/631598/how-to- use-junit-to-test-asynchrone-Prozesse? – Gavriel