面向对象单元测试的案例教学法

来源 :电脑知识与技术 | 被引量 : 0次 | 上传用户:woyaoxiazai88
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:该文介绍了在软件测试课程的教学过程中,结合学生所学的Java的相关知识,用案例教学法来讲解面向对象单元测试这一教学内容,让学生既能理解理论知识又能掌握实践技能,提高学生的学习兴趣,培养学生的动手能力。
  关键词:Java类;面向对象的单元测试;测试用例
  中图分类号:G642文献标识码:A文章编号:1009-3044(2008)35-2435-02
  Object-oriented Unit Testing of the Case Teaching Method
  ZHENG Li-xiang
  (Quanzhou Senior Technical School, Quanzhou 362000, China)
  Abstract: This article describes a software testing in the curriculum, students have learned the combination of Java-related knowledge, the case teaching method used to explain the object-oriented unit testing the contents of teaching so that students can understand the theory of knowledge can master the practical skills and to improve their interest in learning to cultivate the ability of students.
  Key words: Java class; object-orient unit test; test case
  
  1 引言
  
  面向对象的单元测试(简称为OO Unit Test)是检验面向对象程序最小单位,即检查类有无错误的测试工作。因为类是面向对象程序中最基本的单位,所以对于类的测试必须要100%通过,这样面向对象单元测试就显得非常重要了。面向对象的概念及程序设计方法本身就是一个难点,那么要帮助学生理解和掌握面向对象单元测试就更困难了。学生们对此也觉得很枯燥,听不懂,学不会,最后放弃了。为了让学生掌握这方面的知识和技能,我采用的方法是以Java类为例,讲解面向对象单元测试的基本操作过程,以案例代替概念,理论与实践相结合,采用案例教学法。
  为什么要采用Java类作为案例进行教学呢?这主要是考虑到以下两点:
  一是Java语言是当前应用前景非常好的软件设计开发语言,现在的计算机专业一般都会开设这一课程,并且是在《软件测试》之前开设,学生有知识基础。
  二是Java语言是纯面向对象的语言,它摒弃了C/C 中的一些不易掌握的结构,如指针等,其最小处理单位就是类,而且Java语言的程序非常简洁,理解起来比较容易。
  当然作为案例的Java类不能太难了,否则一开始学生就看不懂该Java类的功能,更不用说理解该类的测试过程了。
  为了让学生能够掌握面向对象单元测试技术,我根据学生的知识水平,选用合适的被测试的Java类,为其设计测试用例,执行测试并生成测试文档,用完整的案例进行教学。
  
  2 针对面向对象语言的特征,选择自动化的单元测试方法
  
  在一个典型的软件项目中,有两种类型的测试最为重要:程序员测试和用户测试,或称为单元测试和验收测试。单元测试由程序设计师自行编写测试代码,目的在于验证程序设计师所撰写的代码是否依据其所设想的方式执行而产生符合预期的结果。即验证程序代码的正确性。如果是对采用面向对象方法设计的软件进行单元测试,就是面向对象单元测试了。
  通常,在进行面向对象的单元测试前,我们都要分析几个问题:
  1) 面向对象的单元测试的对象是谁?
  2) 采用人工测试还是自动化测试?
  3) 如果是自动化测试,那么使用什么样的工具合适?
  4) 如何进行面向对象的单元测试?
  对于不同的程序代码来说,以上的问题可能都有不同的答案与之相对应,那么如果使用的是Java语言所编写的代码的话,该怎样决定呢?
  首先,我们知道Java语言是一种高级的、通用的、完全面向对象的程序设计语言,其程序的基本处理单位是类。所以单元测试的对象就是类,即Java的单元测试指的是面向对象的单元测试。
  其次,随着软件的复杂程度越来越高,面向对象单元测试的工作量也随之增加了,若采用人工测试恐怕难以完成。因此,自动化的单元测试要比人工测试要来得适用。再者,自动化测试的另一个好处是能生成测试文档,这样也可以减少文档的撰写工作。
  当然,如果选择了自动化测试就需要工具来支持了,使用何种工具比较合适呢。在此,推荐使用JUnit,这是一种轻量级的测试框架。JUnit是一个开发源代码的Java测试框架,用于编写和运行可重复的测试。它是用于单元测试框架体系xUnit的一个实例(用于Java语言)。主要用于白盒测试,回归测试。JUnit一般不需要另行安装,通常集成的程序设计平台,如Eclipse、JBuilder等都会装有JUnit。
  
  3 设计简单的Java类的单元测试用例来解析面向对象单元测试
  
  3.1 选取待测试的Java类
  为使学生更易理解,案例的选择要先易后难。我们可以用HelloWorld为例说明JUnit是如何进行单元测试的,因为每一种语言在其学习用书的第一个例子通常都是HelloWorld,它最简单了。以下是代码:
  // HelloWorld.java
  packageHelloWorld ;
  public class helloWorld {
  public String sayHello( ) {// 返回测试字符串的方法
  returnstr;
  }
  private String str;
  }
  3.2 设计测试用例,帮助学生掌握测试步骤
  为了对HelloWorld类进行测试,我编写了以下测试用例,它本身也是一个Java类文件。代码如下:
  // HelloWorldTest.java;
  package hello.Test ;
  import helloWorld.*;
  import junit.framework.*;// 引入junit.framework包
  public class HelloWorldTest extends TestCase{
  //继承TestCase类
  public HelloWorldTest ( String name ) {
  super ( name );
  }
  public static Test suite ( ){
  returnnewTestSuite ( HelloWorldTest.class );
  }
  public static void main ( String args[] ) { //主方法
  junit.textui.TestRunner.run ( suite ( ) ) ;
  }
  // 实现对SayHello方法的测试
  private static final String str=”Hello Java!”;
  protected void setUp ( ) { // 覆盖setUp( )方法
  HelloWorld JString = newHelloWorld ( ) ;
  }
  public void testSayHello ( ) {// 测试SayHello方法
  assertEquals ( “Hello Java!”,JString.sayHello ( ) );
  //通过使用标准的Objcet.equals()方法检查两个值是否相等
  }
  }
  3.3 总结测试案例,得出一般性结论
  面向对象单元测试的类,不论多复杂,测试的基本步骤都是不变的,也就是定义测试类文件,在测试类文件中对被测试的类实例化,然后进行测试,测试完成后释放所占用的资源,而有变化的是测试的具体对象——类。在面向对象程序中,对象是属性和方法的封装体,面向对象单元测试针对的是类的成员方法(成员函数)测试其是否能完成定义的功能。
  该例有还另一个特殊之处:程序员在编写Java程序时就要考虑到单元测试了。这是当前的一种比较先进的软件工程方法——测试先行(TDD),所以该例子还让学生初步了解了新的软件工程方法学。
  
  4 编写xml代码,用于生成单元测试文档
  
  在上述案例中没有使用System.out.println()这一打印语句来显示测试结果。这是因为,首先,如果是一个复杂的系统,这种方法很难告诉我们系统是否正常运作。其次,该打印语句进行的是屏幕显示,没有保存结果,要查看结果,每次都要运行测试,这样做费时又费力。所以在面向对象单元测试后还应编写测试文档。对于Java类的面向对象单元测试,我们使用Ant编写生成测试文档的代码。
  Another Neat Tool(Ant)是Apache Jakarta中一个很好用的Java开发工具。Ant将构建和部署的过程自动化,JUnit则将测试自动化。将这两者摆在一起,Ant就能够将构建,部署以及测试的过程自动化。和JUnit一样该工具也不需要另行安装,在集成化的程序设计平台上就有。
  为生成HelloWold的测试文档,我编写了以下代码:
  <project name=”junitSample” default=”test”>
  <target name=”init”>
  <property name=”outdir”
  value=”/tmp/junitSample” />
  </target>
  <target name=”prepare” depends=”init”>
  <mkdir dir=”${outdir}” />
  </target>
  <target name=”compile” depends=”prepare”>
  <javac srcdir=”.”destdir=”${outdir}”
  classpath=”junit.jar” />
  </target>
  <taget name=”test” depends=”compile”>
  <junit printsummary=”true”>
  <formatter type=”xml” />
  <test name=”junit.Samples.HelloWordTest” />
  <classpath>
  <pathelemnet location=”${outdir}” />
  </classpath>
  </junit>
  </target>
  </project>
  该文件保存为build.xml,通过在含有build.xml文件的目录中键入ant,build或 build.sh运行build.xml脚本就会输出结果。因为formatter子元素的type属性值为xml,这样就可以把测试结果输出成XML格式,即保存成一个永久文件,而且其结果还能显示在一个网页上。
  以下即是运行build.xml文件后所生成的XML文件的内容:
  <?xml version=”1.0”?>
  <testsuite errors=”0” failusres=”0”
  name=”junit.samples.HelloWorldTest”
  test=”6” time=”0.201”>
  <testcase name=”testSayHello”
  time=”0”></testcase>
  </testsuite>
  该文件显示了测试的类文件的名称junit.samples.
  HelloWorldTest,所测试的方法的testSayHello,测试用时0.201,显示结果testSayHello没有错误。
  生成测试文档后,整个的Java面向对象单元测试的过程就完成了。
  
  5 通过测试案例,总结出面向对象单元测试的技术方法
  
  在结构化程序时代,单元测试所说的单元是指函数,在当今的面向对象时代,单元测试所说的单元是指类。面向对象的单元测试沿用了单元测试的概念,但与传统的单元测试针对的是程序的函数、过程或完成某一特定功能的程序块相比面向对象单元测试实际测试的是类成员函数。从具体的实践来看,为了降低以类作为测试单位的复杂性,提高其可操作性,可以类成员函数作为单元测试的测试单位,也可以用一个测试类来组织某个类的所有测试函数。
  
  6 结束语
  
  综合以上所述,面向对象的单元测试不易理解与掌握,只讲解概念上的理论知识,可能越讲学生就越糊涂。因此,采用案例教学是一种不错的选择,它将枯燥的概念生动具体化了,学生学习起来也更有兴趣了。而且,一般的软件测试书籍,其内容也是理论知识多,实际应用例子少。所以,不仅是面向对象的单元测试,其他的测试也应尽量地采用案例教学方法,以此帮助学生理解软件测试的知识,并掌握相应的实际测试软件的技能。
  
  参考文献:
  [1] Hightower R.Java极限编程[M].北京:机械工业出版社,2004:137-148.
  [2] 贺平.软件测试教程[M].北京:电子工业出版社,2005:114-127.
  [3] JoeWalnes,Arahanian A,Mike,et al.Java开放源码编程[M].北京:电子工业出版社,2005:14-30.
其他文献
安化集团公司6万t/a甲胺、DMF装置,CO提纯采用“双高”变压吸附工艺,同时得到高纯度的CO和CO2。该工艺节能、环保、操作简单,是煤气提纯的理想工艺。
《今日电影》作为陪都时期具有代表性的影视刊物,呈现出姚苏凤所言的"火药"与"咖啡"的作用。本文采取内容分析法对《今日电影》进行考察,并论述其存在的历史价值,为陪都时期
摘要:在网络安全领域,以互联为主的网络设备是基础,以安全防护为主的防火墙与入侵检测等安全组件是核心。重点对常用网络设备的原理与安全配置进行探讨,在此基础上,提出了针对各种网络攻击的网络设备的安全与协同配置策略,以建立高可靠性的网络安全环境。  关键词:攻防策略;安全配置;协同  中圖分类号:TP393  文献标识码:A  文章编号:1009-3044(2006)29-0045-02
国家网信办启动2021“清朗·春节网络环境”专项行动为营造欢乐喜庆、健康祥和的春节网上氛围,国家网信办开展了为期1个月的“清朗·春节网络环境”专项行动。此次专
北京市政工程设计研究总院是《快速公共汽车交通设计规范》的主编单位。本文主要介绍了快速公共汽车交通(简称快速公交,英文缩写BRT)设计规范编制过程中,对系统组成要素的确定、
雪里红果为蔷薇科落叶乔木,株高5~7米,幼树生长直立,结果后逐年开张,长、中、短果枝及腋花芽均能结果,成年树以短果枝和腋花芽结果为主,自花授粉,结实力强。定植2年后挂果,结果成串,产
随着人们生活水平的不断提高,无污染、安全、优质的绿色食品越来越受市场欢迎。为了满足消费者的需求,提高蔬菜栽培的经济效益,下面简单介绍一下绿色食品的蔬菜栽培技术。
试点示范工作背景 半导体照明亦称固态照明.主要包含发光二极管(LED)和有机物发光二极管(OLED)。半导体照明具有耗电量少、寿命长、色彩丰富、耐震动、可控性强等特点,代表了未来照