软件测试实验-JUnit单元测试_第1页
软件测试实验-JUnit单元测试_第2页
软件测试实验-JUnit单元测试_第3页
软件测试实验-JUnit单元测试_第4页
软件测试实验-JUnit单元测试_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

第三章 JUnit单元测试实验1 开始使用JUnit【实验目的】1、 学习使用JUnit4.X进行单元测试; 2、 掌握JUnit4.X编写测试代码的方法;3、 应用JUnit进行单元测试,掌握最佳实践编写测试代码。【实验环境】1、 Windows环境,MyEclipse或Eclipse,JUnit4.x。2、 每个学生操作1台电脑。【实验原理】JUnit是一个开源的Java编程语言的单元测试框架,最初由 Erich Gamma 和 Kent Beck 编写。Junit测试是一种白盒测试工具。JUnit是一套框架,继承TestCase类,就可以用Junit进行自动测试了。具有JUnit经验对于应用“测试驱动开发(TDD)”的程序开发模型是非常重要的。JUnit本质上是一套框架,即开发者制定了一套条条框框,遵循这此条条框框要求编写测试代码,如继承某个类,实现某个接口,就可以用JUnit进行自动测试了。由于JUnit相对独立于所编写的代码,可以测试代码的编写可以先于实现代码的编写,XP 中推崇的 test first design的实现有了现成的手段:用JUnit写测试代码,写实现代码,运行测试,测试失败,修改实现代码,再运行测试,直到测试成功。以后对代码的修改和优化,运行测试成功,则修改成功。Java 下的 team 开发,采用 cvs(版本控制) + ant(项目管理) + JUnit (集成测试) 的模式时,通过对ant的配置,可以很简单地实现测试自动化。【实验内容】根据下面的实验步骤完成实验。1、 JUnit包下载。 (1) 从下载Junit,打开该链接,会有一个下载链接,下载Junit4.X.zip,保存在用户机的文件系统中。(2) 解包Junit-4.X,得到如图3-1的解包文件。图1 Junit解包文件表1 Junit文件说明文件/目录描 述junit.jarJUnit框架结构、扩展和测试运行器的二进制发布src.jarJUnit的源代码,包括一个 Ant 的buildfile文件junit是个目录,内有JUnit自带的用JUnit编写的测试示例程序javadocJUnit完整的API文档doc一些文档和文章,包括“Test Infected: Programmers Love Writing Tests”和其它一些资料,可以帮助我们入门。(3) 配置(以JUnit4.8.2为例)。步骤如下: 右击“我的电脑”-“属性”-高级-环境变量; 在系统变量中选择“CLASSPATH”(如果没有则新建一个,变量名CLASSPATH,变量值d:junit4.8.2junit-4.8.2.jar;d:junit4.8.2); 如果有CLASSPATH,将d:junit4.8.2junit-4.8.2.jar;d:junit4.8.2加入到变量值即可,多个中间需用;隔开。图2 Junit配置成功 (4) 检验:运行中输入cmd输入命令:java org.junit.runner.JUnitCore org.junit.tests.AllTests配置成功,如图2所示。2、 编写JUnit测试用例。使用JUnit 的最佳实践:(1) 新建一个名为test的source folder,用于存放测试类源代码;(2) 目标类与测试类应该位于同一个包下面,这样测试类中就不必导入源代码所在的包,因为他们位于同一个包下面;(3) 测试类的命名规则:假如目标类是Calculator,那么测试类应该命名为TestCalculator或者是CalculatorTest。下面将以一个具体的实例进行说明。(1) 新建一Java Project。图3 新建Java Project(2) 配置构建路径。图4 配置构建路径 (3) Add Library-JUnit 4。图5 Add Library图6 选择JUnit 4(1)图7 选择JUnit 4(2)(4) 建一个包com.test 并在此包下建一个除法类:Divide。图8 类Divide Divide类的程序源代码如下所示:package com.test;public class Divide private static int result;public void divide(int num)result/=num;public int getResult()return result;public void setResult(int result)Divide.result=result;代码编写完成后,进行调试编译,确保没有语法错误。 (5) 右键Divide类。图9 新建JUnit Test Case(1)图10 新建JUnit Test Case(2)图11 新建JUnit Test Case(3)MyEclipse会自动为测试类取名:被测试类+Test,单击Next就可以了。根据图12选择需要进行测试的方法。注意:测试类之所以使用“Test”开头或“Test”结尾,是为了更好的区分测试类与被测试类。图12 选择需要测试的方法(6) 创建测试用例。首先创建一个默认的测试用例。图13 产生默认的测试用例 (7) 执行测试用例。如图14所示。测试结果:红色,测试失败。图14 运行测试用例图15 测试结果 所有类测试结果(8) 修改测试用例:DivideTest.java。具体代码如图16所示。新测试用例运行后的测试结果如图17所示。注意:测试方法必须使用注解 org.junit.Test 修饰。 测试方法必须使用 public void 修饰,而且不能带有任何参数。测试方法在JUnit4.X中没有要求,但是为了使得命名意义,一般推荐采用“test”+“被测试方法”的命名规则。assertEquals 是由 JUnit 提供的一系列判断测试结果是否正确的静态断言方法(位于类 org.junit.Assert 中)之一,我们使用它将执行结果 result 和预期值“result”进行比较,来判断测试是否成功。图16 修改后的测试用例图17 修改后的测试用例的测试结果绿色的进度条提示我们,测试运行通过了。但现在就宣布代码通过了单元测试还为时过早。记住:你的单元测试代码不是用来证明你是对的,而是为了证明你没有错。因此单元测试的范围要全面,比如对边界值、正常值、错误值得测试;对代码可能出现的问题要全面预测,而这也正是需求分析、详细设计环节中要考虑的。3、 应用JUnit对类WordDealUtil编写测试代码。(1) 被测试程序说明:对名称、地址等字符串格式的内容进行格式检查。将Java对象名称(每个单词的头字母大写)按照数据库命名的习惯进行格式化格式化后的数据为小写字母,并且使用下划线分割命名单词。import java.util.regex.Matcher;import java.util.regex.Pattern;/* * 对名称、地址等字符串格式的内容进行格式检查 * 或者格式化的工具类 */public class WordDealUtil /* * 将Java对象名称(每个单词的头字母大写)按照 * 数据库命名的习惯进行格式化 * 格式化后的数据为小写字母,并且使用下划线分割命名单词 * 例如:employeeInfo 经过格式化之后变为 employee_info * param nameJava对象名称 */public static String wordFormat4DB(String name)Pattern p = Ppile(A-Z);Matcher m = p.matcher(name);StringBuffer sb = new StringBuffer();while(m.find()m.appendReplacement(sb, _+m.group();return m.appendTail(sb).toString().toLowerCase();(2) 添加测试代码。import static org.junit.Assert.assertEquals;import org.junit.Test;public class TestWordDealUtil /测试wordFormat4DB正常运行的情况Test public void wordFormat4DBNormal()String target = employeeInfo;String result = WordDealUtil.wordFormat4DB(target);assertEquals(employee_info, result);推荐每编写完一个测试方法,则执行”run”,看测试结果,结果应该是通过的。测试结果通过:(3) 继续添加测试代码,并运行看测试结果。public class TestWordDealUtil /测试 null 时的处理情况Test public void wordFormat4DBNull()String target = null;String result = WordDealUtil.wordFormat4DB(target);assertNull(result);/测试空字符串的处理情况Test public void wordFormat4DBEmpty()String target = ;String result = WordDealUtil.wordFormat4DB(target);assertEquals(, result);/测试当首字母大写时的情况Test public void wordFormat4DBegin()String target = EmployeeInfo;String result = WordDealUtil.wordFormat4DB(target);assertEquals(employee_info, result);/测试当尾字母为大写时的情况Test public void wordFormat4DBEnd()String target = employeeInfoA;String result = WordDealUtil.wordFormat4DB(target);assertEquals(employee_info_a, result);/测试多个相连字母大写时的情况Test public void wordFormat4DBTogether()String target = employeeAInfo;String result = WordDealUtil.wordFormat4DB(target); assertEquals(employee_a_info, result);再次运行测试。很遗憾,JUnit 运行界面提示我们有两个测试情况未通过测试当首字母大写时得到的处理结果与预期的有偏差,造成测试失败(failure);而当测试对 null 的处理结果时,则直接抛出了异常测试错误

温馨提示

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

最新文档

评论

0/150

提交评论