`
zoutm
  • 浏览: 96400 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

慎用junit作为多线程环境的启动入口

阅读更多

错误现象:

我在调试一个多线程环境下的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和多线程测试的问题

    JUnit作为Java领域最流行的单元测试框架,极大地简化了测试的编写与执行。然而,当我们的应用涉及到多线程时,传统的JUnit测试可能会遇到挑战,因为多线程的并发行为往往难以预测,这导致测试的复杂性和困难度增加。...

    JUNIT多线程测试

    总结起来,进行JUNIT多线程测试是确保代码在并发环境下正确运行的关键步骤。通过使用JUnit提供的工具和机制,我们可以创建出模拟真实并发环境的测试用例,有效地检测和预防并发问题。这不仅提升了代码质量,也为团队...

    Java多线程Junit测试GroboUtils-5.zip

    在多线程环境中使用JUnit进行测试会面临一些挑战,比如如何确保测试的线程安全,避免测试结果的不确定性,以及如何有效地模拟并发情况。GroboUtils-5可能就是为了解决这些问题而设计的工具集,它可能包含了用于创建...

    spring4+junit4.8 +多线程TheadTool

    TheadTool可能是自定义的工具类,用于简化多线程编程,比如提供线程的启动、停止、同步控制等功能。在Spring4中,我们可以利用`org.springframework.util.concurrent.ListenableFuture`或`java.util.concurrent....

    使用tempus-fugit多线程运行Junit Test

    Junit作为Java领域最常用的单元测试框架,极大地便利了开发者进行测试。然而,对于大型项目或性能密集型测试,单线程执行所有的测试用例可能会消耗大量时间。这时,利用多线程并行运行测试可以显著提升效率,这就是`...

    junit5.jar

    此外,JUnit 5支持异步测试,通过`@Test`注解的`async()`属性和`awaitility`库,可以方便地测试多线程和异步操作。配合Lambda表达式,JUnit 5的测试代码更加简洁、易读。 总之,"junit5.jar"作为JUnit 5的核心库,...

    现代多线程 JAVA和c++多线程实现 测试和调试

    在现代软件开发中,多线程技术已经成为必不可少的一部分,特别是在JAVA和C++这样的高级编程语言中。多线程允许程序同时执行多个任务,提高应用程序的响应性和效率。本资源主要探讨了如何在JAVA和C++中实现多线程,...

    junit5.rar包含JUnit Platform + JUnit Jupiter + JUnit Vintage依赖jar包

    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-...

    java项目史上最简单的多线程使用方法(demo)

    "thread-test"项目可能包含单元测试,使用JUnit或TestNG等框架,确保多线程逻辑的正确性。同时,使用`Thread.sleep()`可以模拟延迟,帮助在测试中观察线程行为。日志记录,如SLF4J或Log4j,可以帮助跟踪线程运行情况...

    junit4.1 junit4.1

    junit4.1junit4.1junit4.1junit4.1junit4.1

    JUnit in Action 3nd Edition

    JUnit的优点是灵活、易用、功能强大,而TestNG的优点是支持多线程测试和参数化测试。Cucumber是一个基于行为驱动开发(BDD)的测试框架,支持自然语言描述的测试用例。 JUnit的实践 JUnit的实践非常重要,开发者...

    Junit5.7.2离线jar

    JUnit Vintage则兼容了JUnit4的API,使得老版本的测试代码可以在JUnit5环境中继续运行。 在Java项目中,引入JUnit5.7.2离线jar后,我们可以利用其强大的功能来编写单元测试。例如,@Test注解标记测试方法,这些方法...

    Junit5依赖整合包

    JUnit Platform是一个用于启动测试框架的基础平台,它允许不同的测试引擎并行运行。JUnit Jupiter则是Junit5的主要编程模型,包括注解、API以及扩展机制。JUnit Vintage则用于支持Junit3和Junit4的测试用例,确保向...

    JUnit API JUnit API

    JUnit API JUnit API JUnit API JUnit API JUnit API

    用Junit进行单元测试junit4.5

    JUnit 4.5作为Java单元测试的重要工具,通过注解、参数化测试等特性极大地简化了测试编写,提高了测试效率。理解并熟练运用这些特性,对于保证代码质量,减少缺陷,提升软件的可靠性具有至关重要的作用。在实际项目...

    Junit4环境搭建和Hamcrest初步

    Junit作为Java语言最流行的单元测试框架,被广大开发者广泛使用。本篇将重点介绍如何搭建Junit4的测试环境以及初步接触Hamcrest库,这将帮助你提升测试的质量和效率。 首先,我们来理解什么是Junit4。Junit4是JUnit...

    ui自动化多线程+聚合报告

    2. **并行执行**:使用多线程或多进程库启动测试用例,每个用例在独立的线程或进程中运行。 3. **收集结果**:在每个线程或进程完成后,收集测试结果并存储到共享数据结构或文件中。 4. **生成报告**:所有测试执行...

    多线程测试程序

    在多线程环境中,线程间的数据交换和同步是关键。Java提供了`synchronized`关键字、`wait()`, `notify()`和`notifyAll()`方法,以及`java.util.concurrent`包中的高级工具如`Semaphore`和`BlockingQueue`。Python中...

    junit-4.7.jar

    多数Java的开发环境都已经集成了JUnit作为单元测试的工具。 [1] JUnit是由 Erich Gamma 和 Kent Beck 编写的一个回归测试框架(regression testing framework)。Junit测试是程序员测试,即所谓白盒测试,因为...

    Junit4单元测试源码

    多数Java的开发环境都已经集成了JUnit作为单元测试的工具。 [1] JUnit是由 Erich Gamma 和 Kent Beck 编写的一个回归测试框架(regression testing framework)。Junit测试是程序员测试,即所谓白盒测试,因为...

Global site tag (gtag.js) - Google Analytics