Sto provando a scrivere un test unitario che richiede thread multipli. Tuttavia, sembra che i thread si fermino solo in parte attraverso l'esecuzione. Si consideri il seguente codice:Thread che si comporta stranamente 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();
}
}
Se ho eseguito questo test di unità, sarà generalmente interrompere la visualizzazione di uscita da qualche parte tra 140-180. Se converto questo codice in una classe regolare ed eseguirlo, funziona correttamente. Qualcuno ha idea di cosa mi manchi qui?
Grazie, - Andrew.
Dire che gli oggetti "cancella" JUnit è un po 'fuorviante, poiché in Java non esiste un modo per eliminare esplicitamente un oggetto. –
@Martin a destra. ma JVM può reclamare (GC) quando l'oggetto non è più necessario. Una volta terminati i test, JUnit elimina Thread e fondamentalmente l'intera JVM. – goblinjuice
@goblinjuice che non significa che JUnit uccida un'istanza dell'oggetto. Poiché la JVM termina, tutti i singoli bit di memoria utilizzati verranno liberati. –