做理论的网站,做新标准大学英语网站,企业工商信息查询网官网,seo搜索引擎优化公司写过Junit单元测试的同学应该会有感觉#xff0c;Junit本身是不支持普通的多线程测试的#xff0c;这是因为Junit的底层实现上#xff0c;是用System.exit退出用例执行的。JVM都终止了#xff0c;在测试线程启动的其他线程自然也无法执行。JunitCore代码如下#xff1a; /… 写过Junit单元测试的同学应该会有感觉Junit本身是不支持普通的多线程测试的这是因为Junit的底层实现上是用System.exit退出用例执行的。JVM都终止了在测试线程启动的其他线程自然也无法执行。JunitCore代码如下 /** * Run the tests contained in the classes named in the codeargs/code. * If all tests run successfully, exit with a status of 0. Otherwise exit with a status of 1. * Write feedback while tests are running and write * stack traces for all failed tests after the tests all complete. * param args names of classes in which to find tests to run */ public static void main(String... args) { runMainAndExit(new RealSystem(), args); } /** * Do not use. Testing purposes only. * param system */ public static void runMainAndExit(JUnitSystem system, String... args) { Result result new JUnitCore().runMain(system, args); system.exit(result.wasSuccessful() ? 0 : 1); } RealSystem.java public void exit(int code) { System.exit(code); } 所以要想编写多线程Junit测试用例就必须让主线程等待所有子线程执行完成后再退出。想到的办法自然是Thread中的join方法。话又说回来这样一个简单而又典型的需求难道会没有第三方的包支持么通过google笔者很快就找到了GroboUtils这个Junit多线程测试的开源的第三方的工具包。 GroboUtils官网如下 http://groboutils.sourceforge.net/ 下载页面 http://groboutils.sourceforge.net/downloads.html Maven依赖方式 dependency groupIdnet.sourceforge.groboutils/groupId artifactIdgroboutils-core/artifactId version5/version /dependency 注需要第三方库支持 RepositoryOpensymphony ReleasesRepository urlhttps://oss.sonatype.org/content/repositories/opensymphony-releases 依赖好Jar包后就可以编写多线程测试用例了。上手很简单 /** * 多线程测试用例 * * author lihzh(One Coder) * date 2012-6-12 下午9:18:11 * blog http://www.coderli.com */ Test public void MultiRequestsTest() { // 构造一个Runner TestRunnable runner new TestRunnable() { Override public void runTest() throws Throwable { // 测试内容 } }; int runnerCount 100; //Rnner数组想当于并发多少个。 TestRunnable[] trs new TestRunnable[runnerCount]; for (int i 0; i runnerCount; i) { trs[i] runner; } // 用于执行多线程测试用例的Runner将前面定义的单个Runner组成的数组传入 MultiThreadedTestRunner mttr new MultiThreadedTestRunner(trs); try { // 开发并发执行数组里定义的内容 mttr.runTestRunnables(); } catch (Throwable e) { e.printStackTrace(); } } 执行一下看看效果。怎么样你的Junit也可以执行多线程测试用例了吧。 本文出自One Coder博客出处 http://www.coderli.com/archives/multi-thread-junit-grobountils/ 转载于:https://www.cnblogs.com/xujanus/p/5530444.html