快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-17

扩展JUnit测试并行程序

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

测试并行程序与以往有什么不同 ?

随着多核的普及,并行程序的开发已经提上日 程。相对串行程序而言,并行程序更有可能出错。一方面,并行程序的执行序列具有很强的 随机性,线程交错执行的序列可能每次都不一样,而只要一个序列有问题,整个程序就是不 正确的。另一方面,并行程序对大多数程序员来说,都是一个新的领域,经验相对较少,这 是容易出错的另外一个因素。

既然如此,我们就更需要仔细的测试我们的并行程序和 组件了。目前已经有一些 JUnit 扩展可以创建多个线程,同时运行多个测试用例,从而加快 测试用例集的执行速度,如 p-unit 。但对于测试并行程序和组件,这些功能并不能满足所 有的需求。因为开发人员通常希望可以精确地控制多个线程之间的同步。

与测试顺序 程序相同,我们希望能在测试并行操作之前,首先准备一些测试数据。然后,启动多个线程 测试执行不同的操作。最后,等待所有线程结束之后,检验结果的正确性。在第二阶段中, 多个线程能以任意的次序交错执行。结果的正确性检查应与线程的执行测序无关。

标 准 JUnit 只捕捉来自主线程的 Exception 。而其他线程中产生的 Exception 则会安静地被 忽略掉,使得我们在子线程运行出错的情况下仍旧能得到“ Green Bar ”。这显 然不是程序员喜欢的测试行为,我们希望测试结果能正确地反映所有线程的运行结果。

这种用于并行程序的测试模式会在测试并行程序时会不断的重复。如果开发人员每次 都需要重复创建这些框架,不仅繁琐,而且容易引入错误。通过使用以下介绍的简单扩展, 可以使并行程序的测试变得和顺序程序一样简单。这种扩展并不影响 JUnit 的其他特性以及 各种 IDE 的 JUnit 插件的使用。

下载并使用扩展框架

首先,我们给出一个 使用新扩展进行并行测试的例子。

例 1. 使用 JUnit 扩展进行并行测试

/**  * @author Zhi Gan  *  */  @RunWith (Parallelized.class)  @ParallelSetting(threadNumber = { 1, 2, 4, 8  })  public class TestThreaded {  Set<String> strSet;  @Before  public void setUp() {   strSet = new  LockFreeSet();  }  @Test  public void doNothing() {  }   @InitFor("testThread")  public void  putSomeData(int size){   strSet.add("putSomeData");  }   @Threadedpublic void testThread(int rank, int size) {   //  every thread adds element to set   strSet.add("abcde" + rank);  }   @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测试并行程序(2)

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

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

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

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

接下来, 我们模拟子线程在运行时抛出异常。

例 2. 子线程运行时异常

/**  * @author Zhi Gan  *  */  @RunWith(Parallelized.class)  @ParallelSetting(threadNumber = { 1, 2, 4, 8 })  public  class TestThreaded {  Set<String> strSet;  @Before  public void setUp() {   strSet = new LockFreeSet();  }  @Test  public void doNothing() {  }    @InitFor("testT

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号