Eclipse软件开发工具:第11章 单元测试JUnit_第1页
Eclipse软件开发工具:第11章 单元测试JUnit_第2页
Eclipse软件开发工具:第11章 单元测试JUnit_第3页
Eclipse软件开发工具:第11章 单元测试JUnit_第4页
Eclipse软件开发工具:第11章 单元测试JUnit_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第11章 单元测试JUnit本章学习目标本章要达到的主要目标:理解单元测试的概念;了解JUnit单元测试基础;熟悉JUnit 中常用的类;掌握Eclipse中JUnit 的配置;了解在Eclipse中使用JUnit 进行测试。软件测试背景在软件开发过程中,除了调试之外,还需要进行测试。调试和测试是不同的概念,调试是对成品进行试运行,而测试则是在组装成成品之前,利用一些工具,参照某些标准,对零部件进行检测。在Java开发中,使用率最高的测试工具是JUnit。JUnit背景JUnit是由 Erich Gamma 和 Kent Beck 编写的一个回归测试框架(regression testing

2、framework),供Java开发人员编写单元测试之用。JUnit测试是程序员测试,即所谓白盒测试,因为程序员知道被测试的软件如何(How)完成功能和完成什么样(What)的功能。JUnit本质上是一套框架,即开发者制定了一套条条框框,遵循要求编写测试代码,如继承某个类,实现某个接口,就可以用JUnit进行自动测试了。由于JUnit相对独立于所编写的代码,测试代码的编写可以先于实现代码的编写,使得“极限开发”中推崇的“test first design”的实现有了现成的手段:用JUnit写测试代码,写实现代码,运行测试,测试失败,修改实现代码,再运行测试,直到测试成功。以后对代码的修改和优化

3、,运行测试成功,则修改成功。JUnit简介JUnit是一个开源的java单元测试框架。正如:“麻雀虽小,五脏俱全。”,JUnit功能非常强大:(1)提供的API可以让用户写出测试结果明确的可重用单元测试用例。(2)提供了三种方式来显示用户的测试结果,而且还可以扩展。(3)提供了单元测试用例成批运行的功能。(4)超轻量级而且使用简单,没有商业性的欺骗和无用的向导。(5)整个框架设计良好,易扩展。对不同性质的被测对象,如Class, Jsp, Servlet, Ejb等,JUnit有不同的支持方式。本节仅以Class测试为例。JUnit和Eclipse的关系前面提到了JUnit的作者Erich G

4、amma,他同时还负责了Eclipse的开发,包括JFace的开发和JDT中一些工具的开发。Kent Beck则是极限开发的倡导者,Eclipse中的不少开发工具都体现了极限开发的思想。Erich Gamma和Kent Beck在Eclipse项目的早期,写了多本关于Eclipse的图书,推动了Eclipse的普及。Eclipse具有一个JUnit插件,这个插件已经包含在JDT中,实现了JUnit的GUI界面。这个界面由JUnit视图实现。JUnit配置由于Eclipse中集成了JUnit,所以不必下载,如果想要最新的JUnit类库可以在互联网上下载,之后在Eclipse构建路径中添加JUni

5、t类库即可。下面介绍一下Eclipse中如何配置JUnit。(1)右键单击项目“WebApplication”,选择“Build Path”“Configure Build Path”菜单命令,弹出构建路径对话框,选择“Libraries”选项,如图所示。JUnit配置(2)单击“Add External JARs”可以添加额外的JUnit类库。单击“Add Library”添加Eclipse中自带的JUnit类库,如图所示。JUnit配置(3)选择“Junit”,单击“Next”按钮,出现添加类库对话框,在“JUnit library version”一栏中有“JUnit 3”和“JUnit

6、 4”两个选项,本例中选择“JUnit 4”如图所示。JUnit配置(4)单击“Finish”按钮,完成JUnit类库的添加。如图所示,JUnit类库已经加入当前项目中了。JUnit配置(5)单击“OK”按钮完成。此时在包资源管理器视图(Package Explorer)中可以看到JUnit类库信息,如图所示。准备要测试的类例如,在项目中建立一个新的类Money。新建单元测试一个单元测试用例也是一个类。往往对应一个特定的待测类。在JDT中建立单元测试是非常简单的。输入测试代码下面试着写一段测试代码。如下面代码那样,修改testAdd()方法,加入测试的代码。测试的过程是:先建立两个Money对

7、象,分别是m12CHF、m14CHF。m12CHF的数值是12,m14CHF的数值是14。调用m12CHF的add方法,与m14CHF相加,得出一个新的Money对象result。最后用assertTrue方法,验证得出的result的值是否与预期的expected对象的值相等。运行测试代码运行单元测试修改完成后,就可以试一下运行测试用例了。运行测试用例也是Run命令,通过工具栏上的Run按钮执行。查看单元测试的结果单元测试一旦执行,测试的结果就可以在JUnit视图上清晰地展现出来。编写JUnit单元测试实例编辑类文件:新建一个类文件JUnitExample .java ,该类中只有一个方法s

8、peak(),返回字符串“Hello World!”,代码如下。 package com.myjunit.example;public class JUnitExample /待测试的方法,返回字符串“Hello world!”public String speak() return Hello world!;创建TestCase测试类现在开发JUnit的“Hello World!”例子。(1)建立测试。在工程上单击右键,选择“New”“Other”菜单命令,展开“Java”选项,选择“JUnit”“JUnit Test Case”,如图所示。创建TestCase测试类(2)单击“Next”按

9、钮,弹出新建JUnit测试案例对话框。在“Name”一栏中填入测试案例的名字 “TestGetHelloWorldPrompt”, 在“Class under test”中填入将要被测试的类“com.myjunit.example.JUnitExample”。如图所示。创建TestCase测试类(3)单击“Next”按钮,弹出选择待测试方法对话框,选择“JUnitExample”类的“speak()”方法,单击“Finish”按钮完成。编辑“TestGetHelloWorldPrompt”类代码如下。package com.myjunit.test;import junit.framework

10、.TestCase;import com.myjunit.example.JUnitExample;public class TestGetHelloWorldPrompt extends TestCasepublic void setUp() throws Exception /初始化public void tearDown() throws Exception /撤销初始化public void testSpeak() /构造类JUnitExample的实例测试JUnitExample jue = new JUnitExample();/assertEquals方法是JUnit提供的辅助函

11、数,用于帮助确定某个被测试的函数是/否正常工作,称为“断言”。assertEquals(expected,actual):expected是/期望值,actual是被测试代码实际产生的值assertEquals(Hello zzu!, jue.speak(); 运行TestCase测试类右键单击工程,选择“Run As”“JUnit Test”选项,出现JUnit视图,如图所示。运行TestCase测试类可以看到JUnit视图中出现一个红条,“Failures”为1,说明测试失败了,查看失败原因可以在“Failure Trace”中查找信息。如图所示,说明测试数据与实际数据不一致,导致测试失败

12、。比较测试数据与实际数据修改TestCase测试类下面,我们修改“JUnitExample”类中的“speak”方法,代码如下。package com.myjunit.example;public class JUnitExample / 待测试的方法,返回字符串“Hello zzu!”public String speak() return Hello zzu!;运行TestCase测试类再次运行测试。JUnit视图中出现一个绿条,表明测试成功。成批运行TestCase测试类新建一个“JUnit Test Suite”类,名称为“AllTests”,代码如下。package com.myju

13、nit.example;import org.junit.runner.RunWith;import org.junit.runners.Suite;import org.junit.runners.Suite.SuiteClasses;RunWith(Suite.class)SuiteClasses( TestGetHelloWorldPrompt.class )SuiteClasses( 其他测试类.class )public class AllTests package com.myjunit.test;import junit.framework.Test;import junit.f

14、ramework.TestCase;import junit.framework.TestSuite;public class AllTests public static Test suite() /构造TestSuite类,可以不带参数TestSuite suite = new TestSuite(Test for com.myjunit.test);/$JUnit-BEGIN$/*此处可以添加多个JUnit test。本例中只是使用了前面的一个测试例子。运行AllTests时就可以测试多个JUnit test,测试失败的JUnit test不会影响其他的JUnit test测试*/ su

15、ite.addTestSuite(TestGetHelloWorldPrompt.class);/*suite.addTestSuite(其他测试类.class);*/$JUnit-END$return suite;成批运行TestCase测试类右键单击类“AllTests”,选择“Run As”“JUnit Test”菜单命令,结果如图所示。JUnit知识要点1JUnit中的初始化与撤销在“TestGetHelloWorldPrompt”类中,我们可以看到有setUp与tearDown两个方法,这两个方法是junit framework.TestCase中提供初始化和反初始化每个测试的方法。

16、setUp方法:在每个测试方法调用前被调用,负责初始化测试方法所需要的测试环境;tearDown方法:在每个测试方法被调用之后被调用,负责撤销测试环境。它们与测试方法的关系可以描述如下:测试开始setUptestXXXtearDown测试结束。在setUp和tearDown中的代码是不应该与测试方法相关的,而应该是全局相关的。例如对于测试方法A和B,在setUp和tearDown中的代码应该是A和B都需要的代码。2JUnit的各种断言JUnit为我们提供了一些辅助函数,它们用来帮助我们确定被测试的方法是否按照预期的效果正常工作,通常,把这些辅助函数称为断言。下面介绍一下JUnit的各种断言。a

17、ssertEquals函数原型1:assertEquals(String message,expected,actual)参数说明:message是一个可选的消息,如果提供,将会在发生错误时报告这个消息。 expected是期望值,通常都是用户指定的内容。 actual是被测试的代码返回的实际值。函数原型2:assertEquals(String message,expected,actual,tolerance)参数说明:message是一个可选的消息,如果提供,将会在发生错误时报告这个消息。 expected是期望值,通常都是用户指定的内容。 actual是被测试的代码返回的实际值。 to

18、lerance是误差参数,参加比较的两个浮点数在这个误差之内则会被认为是相等的。JUnit知识要点assertTrue函数原型:assertTrue (String message,Boolean condition)参数说明:message是一个可选的消息,如果提供,将会在发生错误时报告这个消息。 condition是待验证的布尔型值。该断言用来验证给定的布尔型值是否为真,如果结果为假,则验证失败。当然,还有验证为假的测试条件:函数原型:assertFalse(String message,Boolean condition)该断言用来验证给定的布尔型值是否为假,如果结果为真,则验证失败。a

19、ssertNull函数原型:assertNull(String message,Object object)参数说明:message是一个可选的消息,如果提供,将会在发生错误时报告这个消息。 object是待验证的对象。该断言用来验证给定的对象是否为null,如果不为null,则验证失败。相应地,还存在可以验证非null的断言:函数原型:assertNotNull(String message,Object object)该断言用来验证给定的对象是否为非null,如果为null,则验证失败。JUnit知识要点assertSame函数原型:assertSame (String message, expected,actual)参数说明:message是一个可选的消息,如果提供,将会在发生错误时报告这个消息。 expected是期望值。 actual是被测试的代码返回的实际值。该断言用来验证expected参数和actual参数所引用的是否是同一个对象,如果不是,则验证失败。相应地,也

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论