gpt4 book ai didi

eclipse - 无法运行包含来自 Eclipse 的线程的 JUnit 测试用例

转载 作者:行者123 更新时间:2023-12-01 12:01:40 24 4
gpt4 key购买 nike

我正在从 Eclipse 3.4.1 运行 JUnit 测试用例。这个测试用例创建了一个类,它启动一个线程来做一些事情。当测试方法结束时,似乎 Eclipse 正在强行关闭线程。

如果我从命令行运行相同的测试,那么线程会正常运行。

不知何故,我不记得以前在 Eclipse 中遇到过此类问题。这是 Eclipse 中一直存在的东西,还是他们在 3.4.x 中添加了它?

这是一个例子:

当我从 Eclipse 运行此测试时,我得到了一些 cnt 打印(直到大约 1800),然后测试用例自动终止。但是,如果我运行启动 JUnit 的 TestRunner 的 main 方法,则线程计数不确定。

import junit.framework.TestCase;
import junit.textui.TestRunner;

/**
* This class shows that Eclipses JUnit test case runner will forcibly
* terminate all running threads
*
* @author pshah
*
*/
public class ThreadTest extends TestCase {

static Runnable run = new Runnable() {
public void run() {
int cnt = 0;
while(true) System.out.println(cnt++);
}
};

public void testThread() {
Thread t = new Thread(run);
t.start();
}

public static void main(String args[]) {
TestRunner runner = new TestRunner();
runner.run(ThreadTest.class);
}
}

最佳答案

我将您的代码改编为 JUnit NG,结果相同:线程被终止。

public class ThreadTest {

static Runnable run = new Runnable() {
public void run() {
int cnt = 0;
while (true)
System.out.println(cnt++);
}
};

@Test
public void threadRun() {
Thread t = new Thread(run);
t.start();
assertEquals("RUNNABLE", t.getState().toString());
}

}

如果我使用 Eclipe 插件文件夹中的 JUnit jar(在我的例子中是 4.3.1)通过命令行执行测试,它的行为与在 Eclipse 中执行它的行为相同(这是合乎逻辑的:))。

我在命令行中测试了 JUnit 4.6(刚刚下载),它也在短时间后停止了!这与 Eclipse 中的行为完全相同


我发现,如果最后一条指令完成,它就会被杀死。如果您考虑 JUnit 的工作原理,这是合乎逻辑的:
对于每个测试,都会创建一个新对象。如果测试结束,它就会被杀死。所有属于这个测试的东西都被杀死了。
这意味着,必须停止每个线程。

JUnit 可以正确处理这种情况。单元测试必须是独立的并且易于执行。因此,如果达到测试结束,它必须结束所有线程。

可以等待,直到测试完成,然后执行您的assertXXX 指令。这将是测试线程的正确方法。
但要小心:它可能会杀死你的执行时间!

关于eclipse - 无法运行包含来自 Eclipse 的线程的 JUnit 测试用例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/760315/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com