3

我有一个包含 6 个测试的 Junit 类。当第一个测试运行时,它会调用我的另一个类中的一个方法,该方法会启动一个新的 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 是否关闭了它启动的所有线程?非常感谢。

4

2 回答 2

4

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

于 2013-08-09T13:39:56.167 回答
1

为了解决您评论中给出的额外上下文,我建议这正是它的用途@BeforeClass@AfterClass方法。

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

于 2013-08-09T13:51:17.220 回答