Junit是否关闭了所有线程?

时间:2013-08-09 13:24:34

标签: java multithreading junit

我有一个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是否会关闭它启动的所有线程?非常感谢。

2 个答案:

答案 0 :(得分:4)

这实际上不是JUnit,而是运行JUnit测试的外部系统(如Eclipse或Maven),负责终止JVM。那些调用System.exit来停止所有线程。如果JUnit做到了,那么外部系统就没有机会处理结果。

答案 1 :(得分:1)

为了解决your comment中提供的其他背景,我建议这正是@BeforeClass@AfterClass方法的用途。

@BeforeClass中创建(静态)数据库连接,然后在@AfterClass方法中将其关闭。无需使用后台方法等待其他测试完成。