写过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. Android进阶笔记13:RoboBinding(实现了数据绑定 Presentation Model(MVVM) 模式的Android开源框架)

    1.RoboBinding RoboBinding是一个实现了数据绑定 Presentation Model(MVVM) 模式的Android开源框架.从简单的角度看,他移除了如addXXListen ...

  2. Windows Embedded CE 6.0开发环境的搭建

    最近开始在学习嵌入式,在这里首先得安装Windows Embedded CE 6.0,其中遇到了很多问题,电脑的系统以及相关配置都会在安装过程中受到影响,因此笔者就安装中的问题以及环境搭建来介绍一下. ...

  3. android代码片段二

      1.Android拦截短信 一.AndroidManifest.xml <uses-permission android:name="android.permission.RECE ...

  4. Delphi 中的MD5实现方法(转)

    在Delphi自带的Indy控件中其实是提供了MD2,MD4,MD5对象的,我们可以直接使用它们来完成MD5的签名算法.而不需要再去找其它的DLL或是Pas了. 在Uses单元中引用 IdHashMe ...

  5. Sublime text3 安装

    Sublime是一款跨平台的前端开发神器,国外的一款共享软件,虽然是未注册的但不影响使用. 一.下载最新版的安装包 官网地址:http://www.sublimetext.com/3 --portab ...

  6. Linux 命令 - sort: 行排序文本文件

    命令格式 sort [OPTION]... [FILE]... 命令参数 -b, --ignore-leading-blanks 忽略开头的空白字符. -d, --dictionary-order 只 ...

  7. Activity Launch Mode

    launcherMode Activity如何被启动呢?Intent对象中与Activity启动相关的标志(FLAG_ACTIVITY_*)有四个.它们分别是: "standard" ...

  8. SQL中PERSISTED关键字

    PERSISTED 指定 SQL Server 数据库引擎将在表中物理存储计算值,而且,当计算列依赖的任何其他列发生更新时对这些计算值进行更新.将计算列标记为 PERSISTED,可允许您对具有确定性 ...

  9. 自定义DZLMoneyLabel

    一.简介 由于父亲生病,好久没有更新博客了,今天10.1 国庆(应该说是昨天了,已经过了12点了),心血来潮自定义了一个小label.这个控件的难度并不大,也没有什么可以值得炫耀的技术点.写这个控件的 ...

  10. javascript——base64

    <!DOCTYPE html> <head> <title>欢迎</title> <meta charset="utf-8"& ...