软件测试117301田志阳实验5Word格式.docx
- 文档编号:21011285
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:29
- 大小:1.44MB
软件测试117301田志阳实验5Word格式.docx
《软件测试117301田志阳实验5Word格式.docx》由会员分享,可在线阅读,更多相关《软件测试117301田志阳实验5Word格式.docx(29页珍藏版)》请在冰豆网上搜索。
//计算两整数之差
publicintsubtration(intminuend,intsubtrahend){
returnminuend-subtrahend;
}
4)写单元测试代码
为类SampleCalculator添加测试用例。
在资源管理器SampleCalculator.java文件处右击选new>
选JunitTestCase(见图4),Sourcefoler选择testsrc目录,点击next,选择要测试的方法,这里把add和subtration方法都选上,最后点finish完成。
图4新建测试用例
Junit自动生成测试类SampleCalculatorTest,修改其中的代码(如下)。
其中assertEquals断言,用来测试预期目标和实际结果是否相等。
assertEquals([Stingmessage],expected,actual)
expected是期望值(通常都是硬编码的),actual是被测试代码实际产生的值,message是一个可选的消息,如果提供的话,将会在发生错误时报告这个消息。
如想用断言来比较浮点数(在Java中是类型为float或者double的数),则需指定一个额外的误差参数。
assertEquals([Stingmessage],expected,actual,tolerance)
其它断言参见课本和参考书介绍。
测试方法需要按照一定的规范书写:
1.测试方法必须使用注解org.junit.Test修饰。
2.测试方法必须使用publicvoid修饰,而且不能带有任何参数。
5)查看运行结果
在测试类上点击右键,在弹出菜单中选择RunAsJUnitTest。
运行结果如下图,绿色的进度条提示我们,测试运行通过了。
图5示例1运行结果
B、Junit使用方法示例2
1)在工程中添加类
类WordDealUtil中的方法wordFormat4DB()实现的功能见文件注释。
importjava.util.regex.Matcher;
importjava.util.regex.Pattern;
publicclassWordDealUtil{
/**
*将Java对象名称(每个单词的头字母大写)按照
*数据库命名的习惯进行格式化
*格式化后的数据为小写字母,并且使用下划线分割命名单词
*
*例如:
employeeInfo经过格式化之后变为employee_info
*@paramnameJava对象名称
*/
publicstaticStringwordFormat4DB(Stringname){
Patternp=Ppile("
[A-Z]"
);
Matcherm=p.matcher(name);
StringBufferstrBuffer=newStringBuffer();
while(m.find()){
//将当前匹配子串替换为指定字符串,
//并且将替换后的子串以及其之前到上次匹配子串之后的字符串段添加到一个StringBuffer对象里
m.appendReplacement(strBuffer,"
_"
+m.group());
}
//将最后一次匹配工作后剩余的字符串添加到一个StringBuffer对象里
returnm.appendTail(strBuffer).toString().toLowerCase();
2)写单元测试代码
3)进一步完善测试用例
单元测试的范围要全面,如对边界值、正常值、错误值的测试。
运用所学的测试用例的设计方法,如:
等价类划分法、边界值分析法,对测试用例进行进一步完善。
继续补充一些对特殊情况的测试:
//测试null时的处理情况
@TestpublicvoidwordFormat4DBNull(){
Stringtarget=null;
Stringresult=WordDealUtil.wordFormat4DB(target);
assertNull(result);
//测试空字符串的处理情况
@TestpublicvoidwordFormat4DBEmpty(){
Stringtarget="
"
;
assertEquals("
result);
//测试当首字母大写时的情况
@TestpublicvoidwordFormat4DBegin(){
EmployeeInfo"
employee_info"
//测试当尾字母为大写时的情况
@TestpublicvoidwordFormat4DBEnd(){
employeeInfoA"
employee_info_a"
//测试多个相连字母大写时的情况
@TestpublicvoidwordFormat4DBTogether(){
employeeAInfo"
employee_a_info"
4)查看分析运行结果,修改错误代码
再次运行测试。
JUnit运行界面提示我们有两个测试情况未通过测试(见图6),当首字母大写时得到的处理结果与预期的有偏差,造成测试失败(failure);
而当测试对null的处理结果时,则直接抛出了异常——测试错误(error)。
显然,被测试代码中并没有对首字母大写和null这两种特殊情况进行处理,修改如下:
//修改后的方法wordFormat4DB
图6示例2运行结果
2、使用Junit框架对类Date和类DateUtil进行单元测试。
只对包含业务逻辑的方法进行测试,包括:
类Date中的
isDayValid(intyear,intmonth,intday)
isMonthValid(intmonth)
isYearValid(intyear)
类DateUtil中的
isLeapYear(intyear)
getDayofYear(Datedate)
Date类
package
cn.edu.gzhu;
public
class
Date{
Date(){
Date(int
year,
int
month,
day){
super();
if
(this.isDayValid(year,month,day)&
&
this.isMonthValid(month)
&
this.isYearValid(year)){
this.year=year;
this.month=month;
this.day=day;
}else{
throw
new
IllegalArgumentException("
Pleasecheckyourinput!
*0<
year
*/
private
year=-1;
*1<
=month<
=12
month=-1;
=day<
=31thedayshouldinthescope[1,30]whenthemonthis:
4,
*6,,9,11thedayshouldinthescope[1,31]whenthemonthis:
1,3,5,
*7,8,10,12thedayshouldinthescope[1,28]whenthemonthis2and
*theyearisnotleapyear
@see
thedayshouldinthescope[1,29]when
*themonthis2andtheyearisleapyear
@see
day=-1;
boolean
isDayValid(int
((month==4||month==6||month==9||month==11)&
(day<
=30&
day>
=1))
return
true;
(day>
30||day<
1))
false;
((month==1||month==3||month==5||month==7||month==8||month==10||month==12)&
=31||day>
31||day<
if(month==2&
DateUtil.isLeapYear(year)&
=1||day<
=29))
1||day>
29))
!
DateUtil.isLeapYear(year)&
=1&
day<
=28))
28))
isMonthValid(int
month){
month>
month<
=12;
isYearValid(int
year){
year>
0;
getYear(){
year;
void
setYear(int
(this.isYearValid(year)){
getMonth(){
month;
setMonth(int
(this.isMonthValid(month)){
getDay(){
day;
setDay(int
(this.year==-1||
this.month==-1)
IllegalStateException("
Youshouldsettheyearandmonthbeforeday!
(this.isDayValid(year,month,day)){
1)在工程中添加类
修改后的运行结果:
DateUtil类:
DateUtil{
DateUtil(){
*
@param
year
@return
trueifyear%4==0andyear%100!
=0trueifyear%100==0
andyear%400==0falseotherwise
static
isLeapYear(int
if(year<
1)
{
(year%4==0&
year%100!
=0)
(year%100==0&
year%400!
year%400==0)
*
d
dayofyear,改日期是一年中的第几天
getDayofYear(java.util.Dated){
sum=0;
(isLeapYear(d.getYear())){
switch
(d.getMonth()){
case
1:
sum=0;
break;
2:
sum=31;
3:
sum=60;
4:
sum=91;
5:
sum=121;
6:
sum=152;
7:
sum=182;
8:
sum=213;
9:
sum=244;
10:
sum=274;
11:
sum=305;
12:
sum=335;
default:
System.out.print("
dataerror"
}
else
{
sum=59;
sum=90;
sum=120;
sum=151;
sum=181;
sum=212;
sum=243;
sum=273;
sum=304;
sum=334;
sum=sum+d.getDay();
sum;
2)进一步完善测试用例
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件 测试 117301 田志阳 实验