`
顽石OK07
  • 浏览: 81403 次
  • 性别: Icon_minigender_2
  • 来自: 上海
社区版块
存档分类
最新评论

悄然轻松构建和运转多线程的单元测试 转载

阅读更多

随着多核处置器成为主流,开发并行顺序随之成为一种肯定要求。但是我们都知晓并行顺序存在着很大的不确定性,这使得开发和测试并行顺序有必须的难度,因而关于并行顺序的单元测试变得尤为首要。但是,创立多线程的单元测试并不容易,测试须要思索测试线程间的同步,数据共享等。针对 Java 并行顺序的测试,结合扩展 JUnit 的多线程测试工具,本文引见了一种在集成开发环境中,创立契合用户要求的多线程单元测试用例的完壁流程,使得用户只用关心测试本身的逻辑和后果,而不用去明白测试用例并行执行的琐碎详细,从而将大大简约并行顺序员运转并行测试用例,提高并行顺序的开发效率和质量。
  背景
并行顺序
  并行顺序是指控制计算机系统中两个或多个辨别包含一系列指令序列的操作同时执行的顺序,是对处置机上多个操作、或许职务同时执行的一种“谋划”。处置机在运转并行顺序时将同时任务于同一顺序的不一样方面,同时控制和运转辨别包含一系列指令的两个或多个操作。并行顺序设计的首要目标是节省大型和庞杂疑问的处置时间。
  并行顺序设计技术的成长已有 20 多年的历史了,高功用并行计算机系统正在进入越来越多的使用范围。但是与硬件的成长相比,并行软件的成长则显得有些滞后,影响了硬件效率的发扬,限定了并行机系统的普遍使用,因而并行顺序的开发与揣摩也越来越多深化到如今软件的开发流程中。相比拟串行顺序的开发,现在并行顺序的开发与揣摩存在许多的难处,其中首要是由于缺乏有效的并行顺序设计办法和工具,使得编写正确并行顺序、明白并行顺序的行为、调试和优化并行顺序的功用都很难处。
单元测试
  单元测试是对顺序代码单元举行函数级的测试,是完成对最小软件设计单元的验证任务。
  单元测试贯穿于软件开发的整个流程中,关于保证软件质量的首要性不言而喻。作为一种白盒测试,单元测试许多时分是与开发同时举行的。关于单元测试的工具也许多,其中包含著名的 xUnit 系列。本文将触及到的多线程单元测试工具就是从 Java 单元测试工具 JUnit 中扩展而来的。

 

扩展 JUnit 完成多线程单元测试
  关于 Java 来说,JUnit 是备受开发人员喜好的单元测试工具。它甚至还影响了其他言语的测试框架。这点,我们从不单一的 xUnit 框架就能够看出来。随着多核时代的到来,开发人员将须要举行越来越多的并行顺序测试。得益于 JUnit 的可扩展性,我们能够运用 Annotation 让 JUnit 更好地支持并行测试。
  得益于 JUnit 良好的可扩展性,扩展 JUnit 完成多线程单元测试这里首要是议决生成完成多线程测试流程中所需 Annotation 的定义并完成运转自定义测试逻辑来完成的。
  关于扩展 JUnit 完成多线程单元测试,我们在另一篇文章《扩展 JUnit 测试并行顺序》里有专门的引见,下面我们将首要针对这一扩展标明如何在集成开发环境中创立和运转测试用例。
  在集成开发环境中装置并行单元测试插件
  在运用集成开发环境创立多线程的测试用例之前,最先须要在环境中装置扩展 JUnit 的插件,在本文中我们首要引见名为 Unit Test for Multi-Thread 的扩展 JUnit 在集成开发环境 Eclipse 下的装置与运用。
  Unit Test for Multi-Thread 是 IBM 多核软件开发工具 Multicore SDK 下开发的一款用于并行开发中构建多线程测试用例以此来对代码举行单元测试的插件,其是随同 Multicore SDK 一同揭晓的,我们能够议决 eclipse 插件装置的方式来装置它。须要留意的是 Unit Test for Multi-Thread 当前仅支持 Eclipse3.5.x ,其装置流程简述如下:
  最先运转开发工具 Eclipse3.5.x,在翻开界面上点击‘Help’>‘Install New Software...’>‘Add... ’,然后会跳出一个‘Add Site’对话框,在其上面的‘Location’文本框里添加将要装置插件的地址:http://awwebx04.alphaworks.ibm.com/ettktechnologies/updates,点击‘OK’,等候加载,挑选‘Multicore SDK’下的‘Unit Test for Multi-Thread’,点击‘Next’举行装置即可。

 

集成开发环境中创立测试用例
  下面将引见在集成开发环境 Eclipse 中创立多线程测试用例的流程,最先须要装置上文提到的 Eclipse 插件 Unit Test For Multi-Thread。
  详细将分为下面三个步骤来引见:测试环境配置、测试用例生成导游、测试用例的运转和后果搜集。
  测试环境配置
  Unit Test for Multi-Thread 装置好之后,还须要一些容易的配置才干运用,详细步骤能够议决 Eclipse 环境里对项目标 Build Path 下添加 add libraries 配置完成,详细如下所示:
第一步 : 添加 JUnit 到项目 Build Path 中,运用版本为 JUnit 4.5 以上

图 1:右键单击项目,在 Build Path 菜单下挑选 Add Libraries
悄然松松构建和运转多线程的单元测试[多图]图片1
  检查原图(大图)

图 2:挑选 JUnit,单击 Next 进入下一页面
悄然松松构建和运转多线程的单元测试[多图]图片2
  检查原图(大图)

图 3:选定 JUnit4,单击完成
悄然松松构建和运转多线程的单元测试[多图]图片3
  检查原图(大图)

第二步:类似地,添加 Unit Test for Multi-Thread library 到项目 Build Path 中

图 4: 选定 Unit Test for Multi-Thread,单击 Next 完成添加流程
悄然松松构建和运转多线程的单元测试[多图]图片4

 

 


图 5:配置完成后的页面
悄然松松构建和运转多线程的单元测试[多图]图片5
  测试用例生成导游
  Unit Test for Multi-Thread 为用户提供了测试用例生成导游,议决此导游,用户能够很简约地构建自己的多线程测试用例,详细运用流程如下:
  1. 在 Eclipse 中,挑选 File -> New -> Others,选定图中所示:Unit Test for Multi-Thread, 双击进入下一个界面
图 6:测试用例生成导游界面
悄然松松构建和运转多线程的单元测试[多图]图片6
  检查原图(大图)
  2. 将你须要测试的顺序类名填入对应位置,图中例子类名是 demo.CoverageDemo。点击 next,进入下一界面
图 7: 运用生成测试用例面板创立新的测试用例
悄然松松构建和运转多线程的单元测试[多图]图片7
  检查原图(大图)
  3. 在 Methods List 栏目下面挑选须要举行单元测试的办法;Threaded 栏目下面确定能不能运用多线程的方式举行测试,选中为生成多线程,不选则为生成单线程测试用例;在标题为 Thread Numbers for launching the Threaded methods 的文本框中能够配置测试将运用的线程数目列表,图中所示,该单元测试会辨别用 1、2、4、8、16、32 和 64 个线程执行须要并行测试的办法。
图 8:挑选须要举行多线程测试的办法和设定测试线程数
悄然松松构建和运转多线程的单元测试[多图]图片8

 

Unit Test for Multi-Thread 将依据配置导游自动生成测试用例的完壁代码框架,用户可依据被测试代码直接在此框架下添加所需测试的内容,以此提高编写测试用例的效率。
自动生成的测试用例方式如下:
  
 package test; 
 
import static  org.junit.Assert.*; 
 
import  org.amino.util.msdk.unit.Parallelized; 
import  org.amino.util.msdk.unit.annotation.CheckFor; 
import  org.amino.util.msdk.unit.annotation.InitFor; 
import  org.amino.util.msdk.unit.annotation.ParallelSetting; 
import  org.amino.util.msdk.unit.annotation.Threaded; 
import  org.junit.After; 
import org.junit.AfterClass; 
import  org.junit.Before; 
import org.junit.BeforeClass; 
import  org.junit.runner.RunWith; 
 
@RunWith(Parallelized.class) 
@ParallelSetting(threadNumber  = { 1, 2, 4, 8, 16, 32, 64 }) 
 
public class  TestUnitExtensionSample1 { 
 
  @BeforeClass 
  public static  void setUpBeforeClass() throws Exception {} 
 
  @AfterClass 
  public static void tearDownAfterClass() throws Exception {} 
 
   @Before 
  public void setUp() throws Exception {} 
 
  @After 
  public void tearDown() throws Exception {} 
 
   @InitFor("testAdd") 
  public void initfortestAdd(int threadNum){} 
 
  @CheckFor("testAdd") 
  public void checkfortestAdd(int threadNum){}  
 
  @Threaded 
  public void testAdd(int rank, int threadNum) { 
  } 
 
} 

 

测试用例的运转和后果搜集
  Unit Test For Multi-Thread 从 JUnit 扩展而来,保管了 JUnit 运转和后果显示的方式,其运转方式和后果显示如下所示:
图 9:运转 Unit Test For Multi-Thread
悄然松松构建和运转多线程的单元测试[多图]图片9
  检查原图(大图)
  和运转规范 JUnit 一样,运转 Unit Test for Multi-Thread 很容易,
图 10:测试后果无异常
悄然松松构建和运转多线程的单元测试[多图]图片10
  测试议决时将会以绿色标识,
图 11:测试后果存存在 Errors 或 Failures
悄然松松构建和运转多线程的单元测试[多图]图片11
  测试没有完全议决时将会以红色劝诫提示,
图 12:测试报出的失败信息
悄然松松构建和运转多线程的单元测试[多图]图片12
  并生成错误或失败报告给出,全体作风和规范 JUnit 一致,但是其具有独有的生成多线程的测试用例和单元测试的内容,关于熟识 JUnit 的用户来说运用此来举行并行顺序的单元测试将会很简约。
  结论
  随着多核处置器成为主流,并发顺序越来越多的要求运用到软件开发和揣摩中,开发人员不可防止地须要开发和测试并行顺序,本文引见了一种在集成开发环境 Eclipse 中,创立契合用户要求的多线程单元测试用例的流程,这样开发者能够只关心测试本身的逻辑和后果,而不用去明白测试用例并行执行的琐碎详细,从而大大降低开发人员手工创立线程和同步来举行测试的繁琐任务,提高开发效率。

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics