写过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. Divisibility

    Description Consider an arbitrary sequence of integers. One can place + or - operators between integ ...

  2. scrapy yield Request

    import scrapy from myproject.items import MyItem class MySpider(scrapy.Spider): name = ’example.com’ ...

  3. ServiceStack.Redis客户端访问库几项事项

    1)RedisClient的SetValue(string key, byte[]val)方法,如果val的长度为0,则redis服务器库中设置该key值失败. 2)PoolRedisClientMa ...

  4. 5个让DBA爱上你的SQL技巧

    我的一个同事Martin Masarik,SQLde的CEO,跟我谈起了他的一个DBA朋友,他管理着一个国际银行的Oracle数据库,数据规模约2TB.Martin Masarik曾问他:“什么样的S ...

  5. ResponseBody的使用

    使用Spring的@ResponseBody有时还是挺方便的,在ajax调用返回纯字符串时有中文编码问题. @ResponseBody @RequestMapping(value="/dec ...

  6. [未完成]关于Maven的使用总结

    什么是maven 翻译为“专家”,“内行” Maven是跨平台的项目管理工具.主要服务于基于Java平台的项目构建,依赖管理和项目信息管理. 什么是理想的项目构建? 高度自动化,跨平台,可重用的组件, ...

  7. JVM 垃圾回收 Minor gc vs Major gc vs Full gc

    关于垃圾回收机制及比较请参见:http://colobu.com/2015/04/07/minor-gc-vs-major-gc-vs-full-gc/ http://colobu.com/2014/ ...

  8. Spring AOP原理解析

    原文链接请参见:http://blog.csdn.net/u010723709/article/details/47839307

  9. Linux 命令 - passwd: 更改用户密码

    命令格式 passwd  [-k]  [-l]  [-u  [-f]] [-d] [-e] [-n mindays] [-x maxdays] [-w warndays] [-i inactiveda ...

  10. hiho 1182 : 欧拉路·三

    1182 : 欧拉路·三 这时题目中给的提示: 小Ho:是这样的,每次转动一个区域不是相当于原来数字去掉最左边一位,并在最后加上1或者0么. 于是我考虑对于"XYYY",它转动之后 ...