软件测试实验JUnit单元测试.docx
- 文档编号:27876577
- 上传时间:2023-07-05
- 格式:DOCX
- 页数:19
- 大小:723.92KB
软件测试实验JUnit单元测试.docx
《软件测试实验JUnit单元测试.docx》由会员分享,可在线阅读,更多相关《软件测试实验JUnit单元测试.docx(19页珍藏版)》请在冰豆网上搜索。
软件测试实验JUnit单元测试
第三章JUnit单元测试
实验1开始使用JUnit
【实验目的】
1、学习使用JUnit4.X进行单元测试;
2、掌握JUnit4.X编写测试代码的方法;
3、应用JUnit进行单元测试,掌握最佳实践编写测试代码。
【实验环境】
1、Windows环境,MyEclipse或Eclipse,JUnit4.x。
2、每个学生操作1台电脑。
【实验原理】
JUnit是一个开源的Java编程语言的单元测试框架,最初由ErichGamma和KentBeck编写。
Junit测试是一种白盒测试工具。
JUnit是一套框架,继承TestCase类,就可以用Junit进行自动测试了。
具有JUnit经验对于应用“测试驱动开发(TDD)”的程序开发模型是非常重要的。
JUnit本质上是一套框架,即开发者制定了一套条条框框,遵循这此条条框框要求编写测试代码,如继承某个类,实现某个接口,就可以用JUnit进行自动测试了。
由于JUnit相对独立于所编写的代码,可以测试代码的编写可以先于实现代码的编写,XP中推崇的testfirstdesign的实现有了现成的手段:
用JUnit写测试代码,写实现代码,运行测试,测试失败,修改实现代码,再运行测试,直到测试成功。
以后对代码的修改和优化,运行测试成功,则修改成功。
Java下的team开发,采用cvs(版本控制)+ant(项目管理)+JUnit(集成测试)的模式时,通过对ant的配置,可以很简单地实现测试自动化。
【实验内容】
根据下面的实验步骤完成实验。
1、JUnit包下载。
(1)从http:
//www.junit.org下载Junit,打开该链接,会有一个下载链接,下载Junit4.X.zip,保存在用户机的文件系统中。
(2)解包Junit-4.X,得到如图3-1的解包文件。
图1Junit解包文件
表1Junit文件说明
文件/目录
描述
junit.jar
JUnit框架结构、扩展和测试运行器的二进制发布
src.jar
JUnit的源代码,包括一个Ant的buildfile文件
junit
是个目录,内有JUnit自带的用JUnit编写的测试示例程序
javadoc
JUnit完整的API文档
doc
一些文档和文章,包括“TestInfected:
ProgrammersLoveWritingTests”和其它一些资料,可以帮助我们入门。
(3)配置(以JUnit4.8.2为例)。
步骤如下:
1右击“我的电脑”-“属性”-高级-环境变量;
2在系统变量中选择“CLASSPATH”(如果没有则新建一个,变量名CLASSPATH,变量值d:
\junit4.8.2\junit-4.8.2.jar;d:
\junit4.8.2);
3如果有CLASSPATH,将d:
\junit4.8.2\junit-4.8.2.jar;d:
\junit4.8.2加入到变量值即可,多个中间需用;隔开。
图2Junit配置成功
(4)检验:
运行中输入cmd
输入命令:
javaorg.junit.runner.JUnitCoreorg.junit.tests.AllTests
配置成功,如图2所示。
2、编写JUnit测试用例。
使用JUnit的最佳实践:
(1)新建一个名为test的sourcefolder,用于存放测试类源代码;
(2)目标类与测试类应该位于同一个包下面,这样测试类中就不必导入源代码所在的包,因为他们位于同一个包下面;
(3)测试类的命名规则:
假如目标类是Calculator,那么测试类应该命名为TestCalculator或者是CalculatorTest。
下面将以一个具体的实例进行说明。
(1)新建一JavaProject。
图3新建JavaProject
(2)配置构建路径。
图4配置构建路径
(3)AddLibrary-JUnit4。
图5AddLibrary
图6选择JUnit4
(1)
图7选择JUnit4
(2)
(4)建一个包com.test并在此包下建一个除法类:
Divide。
图8类Divide
Divide类的程序源代码如下所示:
packagecom.test;
publicclassDivide{
privatestaticintresult;
publicvoiddivide(intnum)
{
result/=num;
}
publicintgetResult()
{
returnresult;
}
publicvoidsetResult(intresult)
{
Divide.result=result;
}
}
代码编写完成后,进行调试编译,确保没有语法错误。
(5)右键Divide类。
图9新建JUnitTestCase
(1)
图10新建JUnitTestCase
(2)
图11新建JUnitTestCase(3)
MyEclipse会自动为测试类取名:
被测试类+Test,单击Next就可以了。
根据图12选择需要进行测试的方法。
注意:
测试类之所以使用“Test”开头或“Test”结尾,是为了更好的区分测试类与被测试类。
图12选择需要测试的方法
(6)创建测试用例。
首先创建一个默认的测试用例。
图13产生默认的测试用例
(7)执行测试用例。
如图14所示。
测试结果:
红色,测试失败。
图14运行测试用例
图15测试结果
所有类测试结果
(8)修改测试用例:
DivideTest.java。
具体代码如图16所示。
新测试用例运行后的测试结果如图17所示。
注意:
测试方法必须使用注解org.junit.Test修饰。
测试方法必须使用publicvoid修饰,而且不能带有任何参数。
测试方法在JUnit4.X中没有要求,但是为了使得命名意义,一般推荐采用“test”+“被测试方法”的命名规则。
assertEquals是由JUnit提供的一系列判断测试结果是否正确的静态断言方法(位于类org.junit.Assert中)之一,我们使用它将执行结果result和预期值“result”进行比较,来判断测试是否成功。
图16修改后的测试用例
图17修改后的测试用例的测试结果
绿色的进度条提示我们,测试运行通过了。
但现在就宣布代码通过了单元测试还为时过早。
记住:
你的单元测试代码不是用来证明你是对的,而是为了证明你没有错。
因此单元测试的范围要全面,比如对边界值、正常值、错误值得测试;对代码可能出现的问题要全面预测,而这也正是需求分析、详细设计环节中要考虑的。
3、应用JUnit对类WordDealUtil编写测试代码。
(1)被测试程序说明:
对名称、地址等字符串格式的内容进行格式检查。
将Java对象名称(每个单词的头字母大写)按照数据库命名的习惯进行格式化格式化后的数据为小写字母,并且使用下划线分割命名单词。
importjava.util.regex.Matcher;
importjava.util.regex.Pattern;
/**
*对名称、地址等字符串格式的内容进行格式检查
*或者格式化的工具类
*/
publicclassWordDealUtil{
/**
*将Java对象名称(每个单词的头字母大写)按照
*数据库命名的习惯进行格式化
*格式化后的数据为小写字母,并且使用下划线分割命名单词
*例如:
employeeInfo经过格式化之后变为employee_info
*@paramnameJava对象名称
*/
publicstaticStringwordFormat4DB(Stringname){
Patternp=Ppile("[A-Z]");
Matcherm=p.matcher(name);
StringBuffersb=newStringBuffer();
while(m.find()){
m.appendReplacement(sb,"_"+m.group());
}
returnm.appendTail(sb).toString().toLowerCase();
}
}
(2)添加测试代码。
importstaticorg.junit.Assert.assertEquals;
importorg.junit.Test;
publicclassTestWordDealUtil{
//测试wordFormat4DB正常运行的情况
@TestpublicvoidwordFormat4DBNormal(){
Stringtarget="employeeInfo";
Stringresult=WordDealUtil.wordFormat4DB(target);
assertEquals("employee_info",result);
}
}
推荐每编写完一个测试方法,则执行”run”,看测试结果,结果应该是通过的。
测试结果通过:
(3)继续添加测试代码,并运行看测试结果。
publicclassTestWordDealUtil{
//测试null时的处理情况
@TestpublicvoidwordFormat4DBNull(){
Stringtarget=null;
Stringresult=WordDealUtil.wordFormat4DB(target);
assertNull(result);
}
//测试空字符串的处理情况
@TestpublicvoidwordFormat4DBEmpty(){
Stringtarget="";
Stringresult=WordDealUtil.wordFormat4DB(target);
assertEquals("",result);
}
//测试当首字母大写时的情况
@TestpublicvoidwordFormat4DBegin(){
Stringtarget="EmployeeInfo";
Stringresult=WordDealUtil.wordFormat4DB(target);
assertEquals("employee_info",result);
}
//测试当尾字母为大写时的情况
@TestpublicvoidwordFormat4DBEnd(){
Stringtarget="employeeInfoA";
Stringresult=WordDealUtil.wordFormat4DB(target);
assertEquals("employee_info_a",result);
}
//测试多个相连字母大写时的情况
@TestpublicvoidwordFormat4DBTogether(){
Stringtarget="employeeAInfo";
Stringresult=WordDealUtil.wordFormat4DB(target);
assertEquals("employee_a_info",result);
}
}
再次运行测试。
很遗憾,JUnit运行界面提示我们有两个测试情况未通过测试——当首字母大写时得到的处理结果与预期的有偏差,造成测试失败(failure);而当测试对null的处理结果时,则直接抛出了异常——测试错误(error)。
显然,被测试代码中并没有对首字母大写和null这两种特殊情况进行处理。
图18JUnit测试运行结果
(4)修改测试代码,直到测试通过。
修改以后的代码:
测试结果:
【实验小结】
通过本次实验掌握了Junit单元测试的环境配置,以及基本操作步骤,学习到了JInit单元测试的作用以及如何修改错误,对以后进行软件测试方面收获非常大。
经过这次理论学习,明白了要求掌握的知识对于我今后的作用。
这让我明确了以后学习的目标,在不断学习软件编程的同时,也应该继续软件测试的深入学习。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件 测试 实验 JUnit 单元测试