技术开发 频道

轻松构建和运行多线程的单元测试

  【IT168 文档

  前言: 随着多核处理器成为主流,开发并行程序随之成为一种必然要求。但是我们都知道并行程序存在着很大的不确定性,这使得开发和测试并行程序有一定的难度,因此对于并行程序的单元测试变得尤为重要。但是,创建多线程的单元测试并不容易,测试需要考虑测试线程间的同步,数据共享等。针对 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。

  具体将分为下面三个步骤来介绍:测试环境配置、测试用例生成向导、测试用例的运行和结果收集。

0
相关文章