Próbuję napisać test jednostkowy, który wymaga wielu wątków. Wydaje się jednak, że wątki po prostu przerywają częściowe wykonywanie. Rozważmy następujący kod:Nitka zachowuje się dziwnie w 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();
}
}
Jeśli uruchomić ten test jednostki, to zazwyczaj zatrzymać wyświetlanie wyjścia gdzieś pomiędzy 140-180. Jeśli skonwertuję ten kod na zwykłą klasę i uruchomię go, działa dobrze. Czy ktoś ma pojęcie, czego tu brakuje?
Dzięki, - Andrew.
Powiedzieć, że JUnit "usuwa" obiekty jest trochę mylący, ponieważ w Javie nie ma możliwości wyraźnego usunięcia obiektu. –
@Martin w prawo. ale JVM może odzyskać (GC), gdy obiekt nie jest już potrzebny. Po zakończeniu testów JUnit zabija wątki i zasadniczo całą maszynę JVM. – goblinjuice
@Goblinjuice, co nie oznacza, że JUnit w ogóle zabija instancję obiektu. Od momentu wyjścia JVM każdy bit pamięci, który zostanie użyty, zostanie zwolniony. –