快速业务通道

扩展JUnit测试并行程序 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-17
hread")  public void putSomeData(int size){    strSet.add("putSomeData");  }   @Threadedpublic void  testThread(int rank, int size) {   // throw a runtime error in  spawned thread   throw new RuntimeError();  }    @CheckFor("testThread")  public void checkResult(int size) {    assertEquals(size+1, strSet.size());  }  public static void  main(String[] args) {   for (int i = 0; i < 10; i++)   JUnitCore.runClasses(TestThreaded.class);  }  }

扩展JUnit测试并行程序(3)

时间:2011-04-19 IBM 甘志 戴晓君 齐尧

如果 我们在 Eclipse 中运行测试,那么测试完毕之后的 JUnit 视图如下所示:

图 2. 并 行测试的完成结果

扩展JUnit测试并行程序 - 编程入门网

从上图可 以看出,我们的并行测试用例通过了测试,并且它们在使用不同线程运行时都能正常的工作 。而串行的测试方法 (doNothing) 的执行结果则完全和之前一样工作正常。也就是说,串行 和并行测试可以在一个测试类中同时出现。

Annotation 详细说明

表 1. 扩展 的 annotation 说明

名称 参数 使用对象 备注
ParallelSetting threadNum: 用于指定线程数 目。通常我们希望能使用一个数组指定多个值,这样,我们可以了解程序是否在单线程,较 少线程,以及大量线程的情况下是否工作正常。 用于整个 TestCase 来指定测试所 用的并行设置 用于指定整个 TestCase 的并行设置
InitFor 指定此方法服务的测试方法 用于指定初始化 方法所服务的并行测试方法  
Threaded 无参数,或 定义与 @Test 兼容的参数 用于一个具有两个 int 类型的测试方法。测试过程中, 测试框架将会线程序号以及线程总数通过方法的参数传递进来。这有点类似于 MPI 的约定。 指明一个方法为并行测试方法,相当于 JUnit 原有的 @Test 注释
CheckFor 一个字符串参数,用于指定需要被验证的并行测试方 法。 一个 Threaded 修饰的方法 指明一个方法用于检测并行执行的结果 . 我们不能在 Threaded 方法中直接检查,因为其他线程的测试也许还没有结束。

扩展 JUnit 的过程说明

归功于 JUnit 的灵活的内部架 构,只要遵循 JUnit 的标准,我们就能够轻松的扩展 JUnit 的功能。而且遵循标准还意味 着我们的扩展能无缝的利用社区对 JUnit 的广泛支持。例如,我们没有编写任何 Eclipse 插件,但是我们的测试结果能自然的在 Eclipse 中通过精心设计的 GUI 进行展现。

言归正传,我们扩展 JUnit 的过程主要由以下过程组成:

生成 Annotation 的定义 ,包括:@Threaded, @InitFor, @Check, @ParallelSetting

生成 TestClassRunner 的子类 Parallelized 并在其中实现运行自定义测试的逻辑

生成 TestMethodRunner 的子类供 Parallelized 类使用

在实现 ThreadedMethodRunner 时,我们最开始在类 ThreadedMethodRunner 使用了 Thread 类的 setDefaultUncaughtExceptionHandler 来捕获 异常。然后将异常封装到主线程。而目前的版本则利用了 Executor 来运行多线程测试。由 于 JDK 中的 Future 已经提供了类似的能力,所以我们不需要再关心异常的正确传递问题了 。 JUnit 能准确的打印出并行测试中产生的异常信息,这也意味着我们可以使用 JUnit 提 供

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号