新版Junit单元测试实验报告.docx
《新版Junit单元测试实验报告.docx》由会员分享,可在线阅读,更多相关《新版Junit单元测试实验报告.docx(19页珍藏版)》请在冰豆网上搜索。
![新版Junit单元测试实验报告.docx](https://file1.bdocx.com/fileroot1/2023-2/24/b9bec805-b20b-4b66-926f-fa5374489086/b9bec805-b20b-4b66-926f-fa53744890861.gif)
新版Junit单元测试实验报告
软件工程与计算Ⅰ
实
验
报
告
试验名称:
Junit单元测试
试验分组号:
实验人:
陈燕珠
班级:
H13软件工程
学号:
_
试验指导老师:
陈国明
试验场地:
花都校区试验楼709
试验时间:
、6、9
成绩:
试验四Junit单元测试
一、试验目
1.掌握白盒测试方法,并按单元测试要求设计测试用例。
2.能熟练应用junit测试工具进行单元测试。
3.进行代码覆盖检验。
二、试验要求
掌握系统测试基础原理,按试验内容及步骤完成操作,完成试验汇报,全部试验步骤均由每位学生独立完成,严禁剽窃她人试验结果。
依据白盒法设计测试用例,并撰写单元测试计划书。
依据每个测试用例,编写基础Junit单元测试脚本。
生成html格式代码覆盖测试汇报。
三、试验环境
主流PC机一套,windows操作系统eclipse开发平台。
四、原理知识
1.测试基础方法
黑盒测试和白盒测试
(1)黑盒测试(Black_Boxtesting)
黑盒测试把程序看作一个不能打开黑盒子,在完全不考虑程序内部结构和内部特征情况下、重视于测试软件功效性要求,测试者在程序接口处进行测试,只检验程序功效是否根据规格说明书要求正常使用,程序是否能接收输入数据而产生正确输出信息,而且保持数据库和文件完整性
黑盒测试通常能发觉以下几类错误:
1、功效不对或遗漏
2、界面错误
3、数据结构或外部数据库访问错误
4、性能错误
5、初始化和终止错误
采取黑盒技术设计测试用例方法
1、等价类划分
2、边值分析法
3、因果图
4、猜错
5、测试
图1:
白盒测试
(2)白盒测试(White_Boxtesting)
盒测试关键用于检验程序内部结构、逻辑、循环和路径。
常见白盒测试用例设计方法有代码检验法、静态结构分析法、静态质量度量法、逻辑覆盖法、基础路径测试法、符号测试法等。
其中最关键方法就是逻辑覆盖法。
1、语句覆盖
2、判定覆盖
3、条件覆盖
4、条件判定覆盖
5、多条件覆盖
图2:
黑盒测试
手工测试和自动化测试
(1)手工测试
手工测试有其不可替换地方,因为人含有很强判定能力,而工具没有,所以手工测试不可替换性表现在以下多个方面:
①测试用例设计:
测试人员经验和对错误判定能力是工具不可替换;
②界面和用户体验测试:
人类审美观和心理体验是工具不可模拟;
③正确性检验:
大家对是非判定、逻辑推理能力是工具不含有。
(2)自动化测试
自动化测试是把人为驱动测试行为转化为机器实施一个过程
自动化测试技术关键有:
录制/回放、脚本技术、数据驱动、关键字驱动、业务驱动等
常见自动化测试工含有:
负载压力测试工具、功效测试工具、白盒/黑盒测试工具、测试管理工具、测试辅助工具、GUI接口自动化测试工具。
系统测试
系统测试是指将经过集成测试软件系统或子系统,作为基于计算机系统一个元素,与计算机硬件、外设、一些支持软件、数据和人员等其它系统元素组合在一起所进行测试工作,目在于经过与系统需求定义(系统方案说明书、需求说明书等)作比较,发觉软件与系统需求定义不符合或矛盾地方。
1、功效测试(FunctionalTesting)
2、性能测试(PerformanceTesting)
3、负载测试(LoadTesting)
4、强度测试(StressTesting)
5、容量测试(VolumeTesting)
6、安全性测试(SecurityTesting)
7、用户界面测试(UITesting)
8、有效性测试(ValidityTesting)
9、配置测试(ConfigurationTesting)
10、故障恢复测试(RecoveryTesting)
11、安装测试(InstallabilityTesting)
12、可靠性测试(ReliablityTesting)
2.编写测试用例:
采取条件覆盖法设计用例,使判定中每个条件可能取值
测试用例设计步骤:
1、测试需求分析
2、业务步骤分析
3、测试用例设计
4、测试用例评审
5、测试用例更新完善
测试用例ID
abc
测试用例名称
abcTest
测试目
过程是否正确
前置条件
前午夜符合什么条件,后午夜
操作步骤与输入
输入startHour,endHour,startMinute,endMinute
预期结果
程序还没开始运行,自己手工计算结果为13.6
实际结果
一样输入条件比较预期结果与运行结果,判定试验正确性
实施人
陈燕珠
日期
-6-13
实施人
陈燕珠
表1:
测试用例
3.测试计划:
(1)编写源代码,并经过JunitTestCase生成测试代码,并编写测试用例代码。
(2)经过不一样测试用例,分别对源代码进行结构化测试。
(3)生成测试代码覆盖率,并对数据进行分析。
五.试验内容
1、用java语言编写上述章节案例
2、设计白盒测试用例,达成分支覆盖
3、依据以上设计测试用例,编写junit测试代码,并进行测试。
4、完成测试代码覆盖分析,并生成html格式代码覆盖测试汇报。
测试用例ID
abc
测试用例名称
abcTest
测试目
过程是否正确
前置条件
前午夜符合什么条件,后午夜
操作步骤与输入
输入startHour,endHour,startMinute,endMinute
预期结果
程序还没开始运行,自己手工计算结果为13.6
实际结果
一样输入条件比较预期结果与运行结果,判定试验正确性
实施人
陈燕珠
日期
-6-13
实施人
陈燕珠
试验源代码:
abc.java
importjava.util.Scanner;
interfacewage{
publicdoublemoney();
}
classabcd{
staticintstartHour;
staticintstartMinute;
staticintendHour;
staticintendMinute;
doubletotalprice;
publicstaticintinputStartHour()
{intaaa=0;
System.out.println("pleaseinputstarthour18-23");
Scannerbbb=newScanner(System.in);
Stringstr=bbb.nextLine();
try{
if(str.matches("[1][8-9]|[2][0-3]"))
{
System.out.println("correct");
aaa=Integer.parseInt(str);
returnaaa;
}
elsethrownewException("Exception");
}
catch(Exceptionex)
{
System.out.println("pleaseinputagain");
inputStartHour();
}
returnaaa;
}//input
publicstaticintinputStartMinute()
{intaaa=0;
System.out.println("pleaseinputstartminute");
Scannerbbb=newScanner(System.in);
Stringstr=bbb.nextLine();
try{
if(str.matches("[0-5][0-9]|[0-9]"))
{
System.out.println("correct");
aaa=Integer.parseInt(str);
returnaaa;
}
elsethrownewException("Exception");
}
catch(Exceptionex)
{
System.out.println("pleaseinputagain");
inputStartMinute();
}
returnaaa;
}//input
publicstaticintinputEndHour()
{intaaa=0;
System.out.println("pleaseinputEndhour21-230-4");
Scannerbbb=newScanner(System.in);
Stringstr=bbb.nextLine();
try{
if(str.matches("[2][1-3]|[0-4]"))
{
System.out.println("correct");
aaa=Integer.parseInt(str);
returnaaa;
}
elsethrownewException("Exception");
}
catch(Exceptionex)
{
System.out.println("pleaseinputagain");
inputEndHour();
}
returnaaa;
}//input
publicstaticintinputEndMinute()
{intaaa=0;
System.out.println("pleaseinputendminute");
Scannerbbb=newScanner(System.in);
Stringstr=bbb.nextLine();
try{
if(str.matches("[0-5][0-9]|[0-9]"))
{
System.out.println("correct");
aaa=Integer.parseInt(str);
returnaaa;
}
elsethrownewException("Exception");
}
catch(Exceptionex)
{
System.out.println("pleaseinputagain");
inputEndMinute();
}
returnaaa;
}//input
}
classtotalbeforeextendsabcdimplementswage{
publicdoublemoney(){
totalprice=(endHour-startHour)*3.4+(endMinute-startMinute)/60*3.4;
returntotalprice;
}
}
classtotalaferextendsabcdimplementswage{
publicdoublemoney(){
totalprice=(24-startHour-1)*3.4+(60-startMinute)/60*3.4+endHour*3.9+endMinute/60*3.9;
returntotalprice;
}
}
publicclassabc{
publicstaticvoidmain(Stringargs[]){
abcd.startHour=abcd.inputStartHour();
abcd.endHour=abcd.inputEndHour();
abcd.startMinute=abcd.inputStartMinute();
abcd.endMinute=abcd.inputEndMinute();
if(abcd.endHour<=4&&abcd.endHour>0){
totalaferaa=newtotalafer();
aa.startHour=abcd.startHour;
aa.startMinute=abcd.startMinute;
aa.endHour=abcd.endHour;
aa.endMinute=abcd.endMinute;
System.out.println("moneyis"+aa.money());
}
elseif(abcd.endHour>=21&&abcd.endHour<=23){
totalbeforeaa=newtotalbefore();
aa.startHour=abcd.startHour;
aa.startMinute=abcd.startMinute;
aa.endHour=abcd.endHour;
aa.endMinute=abcd.endMinute;
System.out.println("moneyis"+aa.money());
}
}
}
abcTest.java
importjunit.framework.TestCase;
importjunit.framework.Assert;
publicclassabcTestextendsTestCase{
//@Test
publicvoidtesttotalprice(){
doubleactual;
doubleexpecteds=3.4;
try{
abcppp=newabc();
ppp.main(null);
totalbeforep=newtotalbefore();
//totalpricepp=newtotalprice();
abcd.startHour=abcd.inputStartHour();
abcd.endHour=abcd.inputEndHour();
abcd.startMinute=abcd.inputStartMinute();
abcd.endMinute=abcd.inputEndMinute();
//pp.WelcomeScreen.addCommand(pp.Into);
//pp.WelcomeScreen.setCommandListener(pp);
//pp.display.setCurrent(pp.WelcomeScreen);
//pp.newWelcomeThread().start();
p.startHour=22;
p.startMinute=0;
p.endHour=23;
p.endMinute=0;
actual=p.money();
Assert.assertEquals(expecteds,actual,0.0f);
}catch(Exceptione){
e.printStackTrace();
}
}
}
六.试验结果及结论
运行程序,其覆盖情况以下:
图3:
测试代码覆盖分析
图4:
测试用例编写
图5:
导出覆盖率汇报
图6:
自动生成Html覆盖率分析汇报
结论:
当运行测试用例程序abcTest.java来测试用例abc.java时,输入对应输入startHour,endHour,startMinute,endMinute,就会输出对应计算结果。
若是用CoverageAs运行,则能够看到程
序abc覆盖结果和覆盖率。
将其覆盖结果导出为网页模式则能够在生成index.html网页中查看各个程序及函数运行结果及覆盖率。
七.总结(存在问题及处理措施、心得体会等)
此次试验是一个有趣而且实用试验。
程序运行过后,运行到代码和没有运行到代码都用鲜艳颜色覆盖了,鲜明想我们展示了程序代码运行情况。
经过此次试验,我对程序利用率有了更深刻了解。
知道了原来运行一个程序,当输入不一样数据,程序就会运行不一样程序块。
而对应,也会有部分程序块是没有运行到,一个程序中有很多地代码没有使用到。
这让我知道,以后我们写程序就要尽可能写些有用代码,尽可能地让程序运行覆盖率更高,让程序运行愈加快。
八.老师对学生试验情况评价:
☐不能掌握试验内容☐能基础掌握试验内容
☐能很好掌握试验内容☐能熟练掌握试验内容
老师签字:
年6月13日