`
zoutm
  • 浏览: 95516 次
  • 性别: 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和多线程测试的问题。Junit和许多开源软件项目集成在一起,但是Junit执行多线程的单元测试有一些问题。这篇文章介绍Junit的一个扩展类库———GroboUtils

    JUNIT多线程测试

    JUNIT多线程测试

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

    Java多线程Junit测试包,支持多线程测试.

    spring4+junit4.8 +多线程TheadTool

    spring4+junit4.8 +多线程TheadTool

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

    用JUnit测试void方法

    Junit 通常用于那些有明确返回值的方法的测试...因此我们要使用junit测试void方法,必须找到一个有实际返回值的 方法来暂时替代void方法,但此方法只作为被测void方法的入口和出口,测试程序所调用的仍旧是原void方法。

    用Junit进行单元测试junit4.5

    用Junit进行单元测试

    junit4.1 junit4.1

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

    JUnit API JUnit API

    JUnit API JUnit API JUnit API JUnit API JUnit API

    JUNIT介绍JUNIT介绍

    JUNIT介绍.JUNIT介绍.JUNIT介绍.JUNIT介绍.

    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测试是程序员测试,即所谓白盒测试,因为...

    junit-4.12.jar

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

    JUnit如何使用介绍

    (在此文档中我使用JUnit的版本为JUnit4.3.1)先检查一下你的Eclipse环境是否已经有编写JUnit测试类的环境了,如果有了就可以直接使用了,如果没有安装,请参考以下操作,如:在Eclipse要安装那些插件和写JUnit测试...

    JUnit4的环境设定

    写JAVA程序都会用到测试,提供一个Junit4的设定

    用Junit进行单元测试

    用Junit进行单元测试

    junit5-docker, 从你的junit测试启动 Docker 容器.zip

    junit5-docker, 从你的junit测试启动 Docker 容器 junit5-docker 从你的junit测试启动 Docker 容器可以在以下位置找到文档: https://faustxvi.github.io/junit5-docker/

    junit的jar包

    Files contained in junit4-4.8.2.jar: LICENSE.txt META-INF/MANIFEST.MF junit.extensions.ActiveTestSuite.class junit.extensions.RepeatedTest.class junit.extensions.TestDecorator.class junit.extensions...

    Junit 5中文帮助指南

    Junit 5中文帮助指南,JUnit 5跟以前的JUnit版本不一样,它由几大不同的模块组成,这些模块分别来自三个不同的子项目。 JUnit 5 = JUnit Platform + JUnit Jupiter + JUnit Vintage JUnit Platform是在JVM上 启动...

    junit关于junit的介绍

    关于junit的介绍 关于关于junit的介绍关于junit的介绍关于junit的介绍关于junit的介绍关于junit的介绍关于junit的介绍

Global site tag (gtag.js) - Google Analytics