写过Junit单元测试的同学应该会有感觉,Junit本身是不支持普通的多线程测试的,这是因为Junit的底层实现上,是用System.exit退出用例执行的。JVM都终止了,在测试线程启动的其他线程自然也无法执行。JunitCore代码如下:

  1. /**
  2. * Run the tests contained in the classes named in the <code>args</code>.
  3. * If all tests run successfully, exit with a status of 0. Otherwise exit with a status of 1.
  4. * Write feedback while tests are running and write
  5. * stack traces for all failed tests after the tests all complete.
  6. * @param args names of classes in which to find tests to run
  7. */
  8. public static void main(String... args) {
  9. runMainAndExit(new RealSystem(), args);
  10. }
  11. /**
  12. * Do not use. Testing purposes only.
  13. * @param system
  14. */
  15. public static void runMainAndExit(JUnitSystem system, String... args) {
  16. Result result= new JUnitCore().runMain(system, args);
  17. system.exit(result.wasSuccessful() ? 0 : 1);
  18. }

RealSystem.java:

  1. public void exit(int code) {
  2. System.exit(code);
  3. }
所以要想编写多线程Junit测试用例,就必须让主线程等待所有子线程执行完成后再退出。想到的办法自然是Thread中的join方法。话又说回来,这样一个简单而又典型的需求,难道会没有第三方的包支持么?通过google,笔者很快就找到了GroboUtils这个Junit多线程测试的开源的第三方的工具包。
 
 GroboUtils官网如下:
 
 
下载页面:
 
Maven依赖方式:
 
  1. <dependency>
  2. <groupId>net.sourceforge.groboutils</groupId>
  3. <artifactId>groboutils-core</artifactId>
  4. <version>5</version>
  5. </dependency>
注:需要第三方库支持:
Repository Opensymphony Releases
Repository url https://oss.sonatype.org/content/repositories/opensymphony-releases
依赖好Jar包后就可以编写多线程测试用例了。上手很简单:
  1. /**
  2. * 多线程测试用例
  3. *
  4. * @author lihzh(One Coder)
  5. * @date 2012-6-12 下午9:18:11
  6. * @blog http://www.coderli.com
  7. */
  8. @Test
  9. public void MultiRequestsTest() {
  10. // 构造一个Runner
  11. TestRunnable runner = new TestRunnable() {
  12. @Override
  13. public void runTest() throws Throwable {
  14. // 测试内容
  15. }
  16. };
  17. int runnerCount = 100;
  18. //Rnner数组,想当于并发多少个。
  19. TestRunnable[] trs = new TestRunnable[runnerCount];
  20. for (int i = 0; i < runnerCount; i++) {
  21. trs[i] = runner;
  22. }
  23. // 用于执行多线程测试用例的Runner,将前面定义的单个Runner组成的数组传入
  24. MultiThreadedTestRunner mttr = new MultiThreadedTestRunner(trs);
  25. try {
  26. // 开发并发执行数组里定义的内容
  27. mttr.runTestRunnables();
  28. } catch (Throwable e) {
  29. e.printStackTrace();
  30. }
  31. }

执行一下,看看效果。怎么样,你的Junit也可以执行多线程测试用例了吧:)。

本文出自One Coder博客,出处: http://www.coderli.com/archives/multi-thread-junit-grobountils/

多线程的单元测试工具 - GroboUtils的更多相关文章

  1. 在.NET开发中的单元测试工具之(1)——NUnit

    NUnit介绍 NUnit是一个专门针对于.NET来写的单元测试框架,它是xUnit体系中的一员,在xUnit体系中还有针对Java的JUnit和针对C++的CPPUnit,在开始的时候NUnit和x ...

  2. 在.NET开发中的单元测试工具之——NUnit

    NUnit介绍 NUnit是一个专门针对于.NET来写的单元测试框架,它是xUnit体系中的一员,在xUnit体系中还有针对Java的JUnit和针对C++的CPPUnit,在开始的时候NUnit和x ...

  3. 主流的单元测试工具之-JAVA新特性-Annotation 写作者:组长 梁伟龙

    1:什么是Annotation?Annotation,即“@xxx”(如@Before,@After,@Test(timeout=xxx),@ignore),这个单词一般是翻译成元数据,是JAVA的一 ...

  4. codeblocks+Mingw 下配置开源c++单元测试工具 google test

    google test 是google的c++开源单元测试工具,chrome的开发团队就是使用它. Code::Blocks 12.11(MinGW 4.7.1) (Windows版)Google T ...

  5. PHP单元测试工具PHPUnit初体验

    今天接到了个任务,需要对数字进行计算,因为涉及到整数,小数,和科学计数法等很多条件,所以人工测试非常麻烦,于是想到了PHP的单元测试工具PHPUnit,所以写个文档备查. 看了PHPUnit的文档之后 ...

  6. 单元测试工具之Xunit

    在.NET开发中的单元测试工具之——xUnit.Net  原始出处 http://zhoufoxcn.blog.51cto.com/792419/1172320 在上一篇<在.NET开发中的单元 ...

  7. Java单元测试工具:JUnit4(一)(二)(三)(四)

    Java单元测试工具:JUnit4(一)--概述及简单例子 Java单元测试工具:JUnit4(二)--JUnit使用详解 Java单元测试工具:JUnit4(三)--JUnit详解之运行流程及常用注 ...

  8. 单元测试工具 SmokeTest

    .NET 程序集单元测试工具 SmokeTest Smoke Test(冒烟测试),也称Regression Test(回归测试),是对软件的安装和基本功能的测试.一般地我们使用脚本来实现Smoke ...

  9. Web Service单元测试工具实例介绍之SoapUI

    原文  Web Service单元测试工具实例介绍之SoapUI SoapUI是当前比较简单实用的开源Web Service测试工具,提供桌面应用程序和IDE插件程序两种使用方式.能够快速构建项目和组 ...

随机推荐

  1. textarea 中的换行符问题

    下面是我对这个问题的解决过程,最后算是完全搞懂了,真是阴沟里险些翻船 1.必须知道textarea中的换行符是 \n  (个人检测发现按回车键是\n,好像在linux下是\r\n) 2.用nl2br之 ...

  2. [转]关于IIS7.5下的web.config 404 配置的一些问题

    本文转自:http://www.codesky.net/article/201103/161589.html 本文介绍一个关于IIS环境下web.config配置的经验问题.在IIS7.5中添加配置4 ...

  3. 关于IE8不支持document.getElementById().innerHTML的问题

    document.getElementById("id").innerHTML = (showinfo);//IE8不支持. 可以用Jquery来解决这个问题: $('#id'). ...

  4. 关于简明Vim练级攻略

    本文装载于:http://coolshell.cn/articles/5426.html vim的学习曲线相当的大(参看各种文本编辑器的学习曲线),所以,如果你一开始看到的是一大堆VIM的命令分类,你 ...

  5. 练习题之Wait/Notify

    方案一: public class PrintABC { public static void main(String[] args) { AtomicInteger synObj = ); Runn ...

  6. java的回忆录

    封装的三步骤:(1)加属性(成员变量.全局变量.域field)用private来修饰(2)为对应的属性生成共有的setter.getter方法(3)在对应的setter的方法中可以根据需要加入对应的验 ...

  7. hide(1000)跟show(1000)

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. SQL 的一个技巧

    遇到一个需求,项目是我接手二次开发的,之前的大神设计数据库,订单表中没有订单号,现在让我加上这个号,规则是订单创建日期加上自增的ID,ID需要补足5位,例:00002,00124,01245这样.这个 ...

  9. MyEclipse SVN 插件

    一.下载SVN插件subclipse 下载地址:http://subclipse.tigris.org/servlets/ProjectDocumentList?folderID=2240 在打开的网 ...

  10. php和apache的关系和作用()

    出处:http://blog.csdn.net/hongweideng/article/details/41723465 php和apache的关系和作用是很多学习php的朋友非常关注的问题 首先在一 ...