Ich versuche, einen Komponententest zu schreiben, der mehrere Threads erfordert. Es scheint jedoch, dass die Threads nur einen Teil der Ausführung stoppen. Betrachten Sie den folgenden Code ein:Thread verhält sich seltsam in JUnit
public class Test {
@org.junit.Test
public void TestThreads() {
new Thread(new Runnable() {
public void run() {
for (int i = 1; i < 1000; i++) System.out.println(i);
}
}).start();
}
}
Wenn ich diesen Unit-Test ausführen, wird es in der Regel stoppen Ausgabe irgendwo zwischen 140-180 anzeigt. Wenn ich diesen Code in eine reguläre Klasse umwandeln und ausführen, funktioniert es einwandfrei. Hat jemand eine Idee, was ich hier vermisse?
Danke, - Andrew.
Zu sagen, dass JUnit Objekte löscht, ist ein wenig irreführend, da es in Java keine Möglichkeit gibt, ein Objekt explizit zu löschen. –
@Martin rechts. JVM kann jedoch (GC) zurückfordern, wenn das Objekt nicht mehr benötigt wird. Sobald die Tests abgeschlossen sind, tötet JUnit Threads und im Grunde die gesamte JVM. – goblinjuice
@goblinjuice das bedeutet nicht, dass JUnit überhaupt eine Objektinstanz abstürzt. Da die JVM beendet wird, wird jedes einzelne verwendete Speicherbit freigegeben. –