我有一个Junit类,里面有6个测试。当第一个测试运行时,它调用我的另一个类中的一个方法,它启动一个新的Thread()。我们称之为MyThread
。
这个想法是让MyThread
在JUnit测试完成后继续运行一段时间。
例如,对于要完成的所有JUnit测试,需要1秒,因此我将MyThread
设置为运行3秒:
new Thread(new Runable(){
public void run(){
System.out.println("start");
Thread.sleep(3000);
System.out.println("end");
}
}).start();
start
会显示在标准输出上,但end
永远不会显示。
在我看来,每当完成JUnit测试时,MyThread
也会被关闭。
所以我想知道,JUnit是否会关闭它启动的所有线程?非常感谢。
答案 0 :(得分:4)
这实际上不是JUnit,而是运行JUnit测试的外部系统(如Eclipse或Maven),负责终止JVM。那些调用System.exit来停止所有线程。如果JUnit做到了,那么外部系统就没有机会处理结果。
答案 1 :(得分:1)
为了解决your comment中提供的其他背景,我建议这正是@BeforeClass
和@AfterClass
方法的用途。
在@BeforeClass
中创建(静态)数据库连接,然后在@AfterClass
方法中将其关闭。无需使用后台方法等待其他测试完成。