写过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官网如下:
http://groboutils.sourceforge.net/
下载页面:
http://groboutils.sourceforge.net/downloads.html
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/

转载于:https://www.cnblogs.com/xujanus/p/5530444.html

多线程的单元测试工具 - GroboUtils相关推荐

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

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

  2. 【软件测试】2021年软件测试领域常用工具总结(1)-抓包工具与单元测试工具篇

    前言 大家好,我是洋子,作为一名测试开发/软件测试工程师, 在进行软件测试的过程中,会用到测试工具去辅助测试,以提高测试工作的效率.今天就给大家介绍一下2021年软件测试领域当中的最流行,最实用的工具 ...

  3. Openstack_单元测试工具 tox

    目录 目录 扩展阅读 Openstack 的单元测试工具 单元测试工具使用流程 tox toxini 参考文章 扩展阅读 Python Mock的入门 Openstack 的单元测试工具 unitte ...

  4. CSerialPort多线程串口编程工具详解

    1.前言 既然有了MSComm这种简单粗暴的控件,为什么还需要CSerialPort类?这是因为与前者相比,这个类在程序的发布上不需要加入其他的文件,而且CSerialPort提供给我们的函数都是开放 ...

  5. python 单元测试 工具_Django单元测试工具test client使用详解

    The test client test client是一个python类,来模拟一个简单的"哑"浏览器,允许你来测试你的view函数.你可以使用test client完成下列事情 ...

  6. SAP UI5 初学者教程之二十七 - SAP UI5 应用的单元测试工具 QUnit 介绍试读版

    一套适合 SAP UI5 初学者循序渐进的学习教程 教程目录 SAP UI5 本地开发环境的搭建 SAP UI5 初学者教程之一:Hello World SAP UI5 初学者教程之二:SAP UI5 ...

  7. SAP UI5 应用开发教程之二十七 - SAP UI5 应用的单元测试工具 QUnit 介绍

    Jerry 在之前做 SAP UI5 标准开发和现在使用 Angular 开发 SAP Spartacus 应用时,我们团队的开发规范就是,每增添一个新的前端 feature,必须要用一个新增的单元测 ...

  8. 常见单元测试工具介绍

    1.       C/C++语言开发的首选利器- C++Test 以前在windows平台下的开发,使用的框架主要是MFC,以及console工程(基于win32SDK),属于纯C/C++开发的范畴. ...

  9. 说实话,写了这么多程序了,还从来没有用JUnit作为单元测试工具测试过,今天就来学习一下

    1.    说实话,写了这么多程序了,还从来没有用JUnit作为单元测试工具测试过,心理面感到真的是惭愧.原来的所有测试,我都是通过在控制台打印输出语句看结果,这样就可以根据自己打印的信息自己去判断, ...

最新文章

  1. 电子狗显示连接不上服务器,大家觉得我这样做得对吗?行车记录仪新名词:云狗...
  2. 域控制器服务器端和客户端设置
  3. Codeforces Round #740 (Div. 2, based on VK Cup 2021 - Final (Engine)) A-F全题解
  4. 【小程序】微信小程序开发实践
  5. php 支付宝小程序授权登陆验签_星巴克“啡快”登陆支付宝小程序,让你“飞快”取到咖啡...
  6. 信息学奥赛一本通C++语言——1102: 与指定数字相同的数的个数
  7. python怎么输入三个数按大小输出_Python练习一 : 随机输入三数字,按大小顺序输出...
  8. 安卓案例:网格布局实现计算器界面
  9. mysql加密复制_MySQL主从复制使用SSL加密
  10. 【Nginx】Nginx学习笔记01_linux/centos下安装Nginx
  11. 自制电吉他效果器 DIY PCB(三)原理图与封装 上
  12. 高中低压电网光伏并网二次设计——分布式光伏电站并网市电通讯组网
  13. 塑胶产品内滑块设计要点,以及注意哪些事项?
  14. RPM包安装MYSQL
  15. 计算机的内存不足建议使用,别再说内存不足了!教你一招彻底解决,电脑运行加速3倍!...
  16. 何为“定向融资计划”?适合你投资吗?
  17. 力扣 167. 两数之和 II - 输入有序数组
  18. xsy3320 string
  19. 【scau算法分析设计】11075强盗分赃|17963 完美数(c)
  20. 阿里面试官的 说一下从url输入到返回请求的过程 问的难度就是不一样!

热门文章

  1. 八、Pandas的基本使用
  2. LeetCode 1771. 由子序列构造的最长回文串的长度(最长回文子序)
  3. LeetCode 679. 24 点游戏(回溯)
  4. LeetCode MySQL 1398. 购买了产品A和产品B却没有购买产品C的顾客
  5. LeetCode 505. 迷宫 II(BFS / Dijkstra 最短路径)
  6. LeetCode 1244. 力扣排行榜(map+multiset)
  7. 程序员面试金典 - 面试题 08.11. 硬币(背包DP)
  8. 程序员面试金典 - 面试题 01.08. 零矩阵
  9. LeetCode 611. 有效三角形的个数(双指针)
  10. 神经网络 - 用单层感知器实现多个神经元的分类 - (Matlab建模)