软件测试实验报告一.docx
- 文档编号:9700681
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:12
- 大小:358.34KB
软件测试实验报告一.docx
《软件测试实验报告一.docx》由会员分享,可在线阅读,更多相关《软件测试实验报告一.docx(12页珍藏版)》请在冰豆网上搜索。
软件测试实验报告一
武汉轻工大学
《软件测试》
实验报告
姓名赵佳璐
学号1508100065
院(系)数学与计算机学院
专业软件工程
班级1504
2018年5月8日
实验一单元测试工具JUNIT
一、实验目的
了解自动化测试工具JUnit的架构、功能,学习如何下载、安装JUnit,掌握使用JUnit对Java程序进行单元测试的方法。
二、实验过程和结果
练习1
使用JUnit对Money类进行单元测试
在Eclipse下新建类Money
代码:
packagetest;
publicclassMoney
{
privateintfAmount;//货币余额
privateStringfCurrency;//货币类型
publicMoney(intamount,Stringcurrency)
{
fAmount=amount;
fCurrency=currency;
}
publicintamount()
{
returnfAmount;
}
publicStringcurrency()
{
returnfCurrency;
}
publicMoneyadd(Moneym)//add方法把两个Money对象相加,合成一个Money对象
{
returnnewMoney(amount()+m.amount(),currency());
}
publicbooleanequals(ObjectanObject)//equals方法判断两个Money对象是否相等
{
if(anObjectinstanceofMoney)
{
MoneyaMoney=(Money)anObject;
returnaMoney.currency().equals(currency())&&amount()==aMoney.amount();
}
returnfalse;
}
}
现在要对Money类的add方法进行测试,步骤如下:
(1)在Eclipse下新建类测试类MoneyTest的testAdd()方法
packagetest;
importstaticorg.junit.Assert.*;
importorg.junit.Before;
importorg.junit.Ignore;
importorg.junit.Test;
publicclassMoneyTest{
Moneyresult;
Moneym12CHF=newMoney(12,"CHF");
Moneym14CHF=newMoney(14,"CHF");
Moneyexpected=newMoney(26,"CHF");//预期的运行结果
@Test
publicvoidtestAdd()
{
result=m12CHF.add(m14CHF);
assertTrue(expected.equals(result));//判断运行结果是否与预期值相同
}
}
(2)在Eclipse下新建类测试类MoneyTest的testEquals()方法:
@Test
publicvoidtestEquals()
{
assertTrue(!
m12CHF.equals(null));
assertTrue(!
m12CHF.equals(m14CHF));
assertEquals(m12CHF,m12CHF);
assertEquals(m12CHF,newMoney(12,"CHF"));
}
截图1:
结果1:
测试通过。
练习2
修改测试代码CalculatorTest,增加@BeforeClass,@AfterClass,@Before,@After,@ignore,限时测试@Test(timeout=毫秒),@Test(expected=ArithmeticException.class)。
被测试代码Calculator:
packageandycpp;
publicclassCalculator{
privatestaticintresult;//静态变量,用于存储运行结果
publicvoidadd(intn)...{
result=result+n;
}
publicvoidsubstract(intn)...{
result=result-1;//Bug:
正确的应该是result=result-n
}
publicvoidmultiply(intn)...{
}//此方法尚未写好
publicvoiddivide(intn)...{
result=result/n;
}
publicvoidsquare(intn)...{
result=n*n;
}
publicvoidsquareRoot(intn)...{
for(;;);//Bug:
死循环
}
publicvoidclear()...{//将结果清零
result=0;
}
publicintgetResult()...{
returnresult;
}
}
测试代码CalculatorTestpackageandycpp:
importstaticorg.junit.Assert.*;
importorg.junit.Before;
importorg.junit.Ignore;
importorg.junit.Test;
publicclassCalculatorTest...{
privatestaticCalculatorcalculator=newCalculator();
@Before
publicvoidsetUp()throwsException...{
calculator.clear();
}
@Test
publicvoidtestAdd()...{
calculator.add
(2);
calculator.add(3);
assertEquals(5,calculator.getResult());
}
@Test
publicvoidtestSubstract()...{
calculator.add(10);
calculator.substract
(2);
assertEquals(8,calculator.getResult());
}
@Ignore("Multiply()Notyetimplemented")
@Test
publicvoidtestMultiply()...{
}
@Test
publicvoidtestDivide()...{
calculator.add(8);
calculator.divide
(2);
assertEquals(4,calculator.getResult());
}
}
截图2:
结果2:
添加标注@Before,使每一次进行各个测试方法之前先进行方法setup(),使变量清零
添加标注@Ignore,使每一次进行各个测试方法时忽略testMultiply()
截图3:
结果3:
添加标注@After,使每一次进行各个测试方法之后必进行方法setup()
截图4:
结果4:
添加标注@BeforeClass,使每一次进行所有测试方法之前必进行方法Before(),打印出BeforeClass
截图5:
结果5:
添加标注@Test(timeout=1000),测试方法squreRoot()方法死循环
截图6:
结果6:
添加标注@Test(expected=ArithmeticException.class)抛出“除0异常”
练习3
阅读试验任务中的7-9中的案例集成为某个测试类,验证实验结果。
代码:
importstaticorg.junit.Assert.assertEquals;
importorg.junit.Test;
importorg.junit.runner.RunWith;
importorg.junit.runners.Parameterized;
importorg.junit.runners.Parameterized.Parameters;
importjava.util.Arrays;
importjava.util.Collection;
@RunWith(Parameterized.class)//更改默认的测试运行器为Parameterized.class
publicclassSquareTest{
privatestaticCalculatorcalculator=newCalculator();
privateintparam;//声明变量存放输入参数(用来计算实际结果)
privateintresult;//声明变量存放预期值
//声明一个返回值为Collection的公共静态方法,并用@Parameters修饰
@Parameters
publicstaticCollectiondata(){
returnArrays.asList(newObject[][]{{2,4},{0,0},{-3,9}});
}
//为测试类声明一个带有参数的公共构造方法,并为声明变量赋值
publicSquareTest(intparam,intresult){
this.param=param;
this.result=result;
}
@Test
publicvoidsquare(){
calculator.square(param);
assertEquals(result,calculator.getResult());
}
}
截图7:
结果7:
参数化测试@RunWith(Parameterized.class),把若干种情况作为参数传递进去,一次性的完成测试,测试结果和预期结果一致
截图8:
结果8:
利用@RunWith(Suite.class)一次性进行所有测试
三:
实验总结
通过本次实验我学会了如何使用junit进行基本的软件测试流程,了解了如何使用一些基本的测试方法的声明,另外参数化测试能够一次性传递多个测试参数进行测试,提高了便捷性,测试套件能够一次性进行多项测试,极大的提高了软件测试的效率。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件 测试 实验 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)