错误现象:
我在调试一个多线程环境下的server程序。用junit的测试方法作为启动,很快程序就退出,而且没有任何异常信息。server程序的逻辑是主线程启动多个线程池后退出。多个线程池的线程都不是Daemon线程。采用main方法启动后程序将不会退出。
原因分析:
在多线程环境下,程序退出的条件是,所有的非Daemon线程都正常结束或者某个线程条用了system.exit方法,导致进程强行退出。在eclipse下运行Junit的类是org.eclipse.jdt.internal.junit.runner.RemoteTestRunner。通过查看这个类的main方法。如下:
public static void main(String [] args) {
try {
RemoteTestRunner testRunServer= new RemoteTestRunner();
testRunServer.init(args);
testRunServer.run();
} catch (Throwable e) {
e.printStackTrace(); // don't allow System.exit(0) to swallow exceptions
} finally {
// fix for 14434
System.exit(0);
}
}
显然,只要主线程结束,整个程序将会退出,这就是采用junit的时候奇怪退出程序的原因。
解决办法:
在进行多线程测试的时候,进来采用自己写的main方法启动。
分享到:
相关推荐
JUnit作为Java领域最流行的单元测试框架,极大地简化了测试的编写与执行。然而,当我们的应用涉及到多线程时,传统的JUnit测试可能会遇到挑战,因为多线程的并发行为往往难以预测,这导致测试的复杂性和困难度增加。...
总结起来,进行JUNIT多线程测试是确保代码在并发环境下正确运行的关键步骤。通过使用JUnit提供的工具和机制,我们可以创建出模拟真实并发环境的测试用例,有效地检测和预防并发问题。这不仅提升了代码质量,也为团队...
在多线程环境中使用JUnit进行测试会面临一些挑战,比如如何确保测试的线程安全,避免测试结果的不确定性,以及如何有效地模拟并发情况。GroboUtils-5可能就是为了解决这些问题而设计的工具集,它可能包含了用于创建...
TheadTool可能是自定义的工具类,用于简化多线程编程,比如提供线程的启动、停止、同步控制等功能。在Spring4中,我们可以利用`org.springframework.util.concurrent.ListenableFuture`或`java.util.concurrent....
Junit作为Java领域最常用的单元测试框架,极大地便利了开发者进行测试。然而,对于大型项目或性能密集型测试,单线程执行所有的测试用例可能会消耗大量时间。这时,利用多线程并行运行测试可以显著提升效率,这就是`...
此外,JUnit 5支持异步测试,通过`@Test`注解的`async()`属性和`awaitility`库,可以方便地测试多线程和异步操作。配合Lambda表达式,JUnit 5的测试代码更加简洁、易读。 总之,"junit5.jar"作为JUnit 5的核心库,...
在现代软件开发中,多线程技术已经成为必不可少的一部分,特别是在JAVA和C++这样的高级编程语言中。多线程允许程序同时执行多个任务,提高应用程序的响应性和效率。本资源主要探讨了如何在JAVA和C++中实现多线程,...
JUnit 5 = JUnit Platform + JUnit Jupiter + JUnit Vintage,包含依赖包:junit-jupiter-5.5.1.jar,junit-jupiter-engine-5.5.1.jar,junit-jupiter-params-5.5.1.jar,junit-platform-launcher-1.5.1.jar,junit-...
"thread-test"项目可能包含单元测试,使用JUnit或TestNG等框架,确保多线程逻辑的正确性。同时,使用`Thread.sleep()`可以模拟延迟,帮助在测试中观察线程行为。日志记录,如SLF4J或Log4j,可以帮助跟踪线程运行情况...
junit4.1junit4.1junit4.1junit4.1junit4.1
JUnit的优点是灵活、易用、功能强大,而TestNG的优点是支持多线程测试和参数化测试。Cucumber是一个基于行为驱动开发(BDD)的测试框架,支持自然语言描述的测试用例。 JUnit的实践 JUnit的实践非常重要,开发者...
JUnit Vintage则兼容了JUnit4的API,使得老版本的测试代码可以在JUnit5环境中继续运行。 在Java项目中,引入JUnit5.7.2离线jar后,我们可以利用其强大的功能来编写单元测试。例如,@Test注解标记测试方法,这些方法...
JUnit Platform是一个用于启动测试框架的基础平台,它允许不同的测试引擎并行运行。JUnit Jupiter则是Junit5的主要编程模型,包括注解、API以及扩展机制。JUnit Vintage则用于支持Junit3和Junit4的测试用例,确保向...
JUnit API JUnit API JUnit API JUnit API JUnit API
JUnit 4.5作为Java单元测试的重要工具,通过注解、参数化测试等特性极大地简化了测试编写,提高了测试效率。理解并熟练运用这些特性,对于保证代码质量,减少缺陷,提升软件的可靠性具有至关重要的作用。在实际项目...
Junit作为Java语言最流行的单元测试框架,被广大开发者广泛使用。本篇将重点介绍如何搭建Junit4的测试环境以及初步接触Hamcrest库,这将帮助你提升测试的质量和效率。 首先,我们来理解什么是Junit4。Junit4是JUnit...
2. **并行执行**:使用多线程或多进程库启动测试用例,每个用例在独立的线程或进程中运行。 3. **收集结果**:在每个线程或进程完成后,收集测试结果并存储到共享数据结构或文件中。 4. **生成报告**:所有测试执行...
在多线程环境中,线程间的数据交换和同步是关键。Java提供了`synchronized`关键字、`wait()`, `notify()`和`notifyAll()`方法,以及`java.util.concurrent`包中的高级工具如`Semaphore`和`BlockingQueue`。Python中...
多数Java的开发环境都已经集成了JUnit作为单元测试的工具。 [1] JUnit是由 Erich Gamma 和 Kent Beck 编写的一个回归测试框架(regression testing framework)。Junit测试是程序员测试,即所谓白盒测试,因为...
多数Java的开发环境都已经集成了JUnit作为单元测试的工具。 [1] JUnit是由 Erich Gamma 和 Kent Beck 编写的一个回归测试框架(regression testing framework)。Junit测试是程序员测试,即所谓白盒测试,因为...