1、实验报告 实验序号:02 实验项目名称:基本路径测试法和单元测试工具JUnit的使用 学 号 0907052103 姓 名 曹锋 专业、班 09软件工程一班 实验地点 1#316 指导教师 崔建峰 实验时间 2012/3/5 一、实验目的 l 掌握基本路径测试方法; l 了解在Eclipse环境下JUnit单元测试工具的安装和使用方法; l 针对一个实际问题,在JUnit环境下设计并执行测试用例。 二、实验要求 l 开发环境:Eclipse v3.7及以上版本;JUnit v4.10及以上版本;文本编辑软件。 l 硬件要求:CPU PIV 以上,
2、256M 内存,1G 硬盘空间。 l 系统要求:Windows98/Me/XP/NT/2000,IE 5 以上。 三、实验内容与步骤 1. 下载并安装JDK+Eclipse,学习Eclipse安装与使用方法。 2. 下载并安装JUnit,学习JUnit安装与使用方法。 3. 通读自动售货机程序,并将其在Eclipse环境下运行。问题描述,程序流程图和程序源代码见附录。 4. 按照如下格式,采用基本路径测试法编写测试用例(要有程序流程控制图,基本路径)。 编 号 输入值 Type 输入值 money 状态 预 输出 实际情况 1 Beer 5C 各资源剩余
3、 Input Information Type: Beer; Money: 5 Cents; Change: 0 Current State Beer: 5 Orange Juice: 6 5 Cents: 7 1 Dollar: 6 与预期相同 2 OrangeJuice 5C 各资源剩余 Input Information Type: OrangeJuice; Money: 5 Cents; Change: 0 Current State Beer: 6 Orange Juice: 5 5 Cents: 7 1 Dollar: 6 与预期相
4、同 3 Beer 5C 没有啤酒 Filure Information Beer Shortage 与预期相同 4 OrangeJuice 5C 没有橙汁 Failure Information OrangeJuice Shortage 与预期不同 5 Cola 5C 各资源剩余 Failure Information Type Error 与预期相同 6 Beer 1D 没 啤酒 Failure Information Beer Shortage 与预期不同 7 Beer 1D 各资源剩余 Input Information
5、 Type: Beer; Money: 1 Dollar; Change:5 Cents Current State Beer: 5 Orange Juice: 6 5 Cents: 5 1 Dollar: 7 与预期不同 8 OrangeJuice 1D 各资源剩余 Input Information Type: OrangeJuice; Money: 1 Dollar; Change: 5 Cents Current State Beer: 6 Orange Juice: 5 5 Cents:5 1 Dollar: 7 与预期不同 9 O
6、rangeJuice 1D 没有橙汁 Failure Information OrangeJuice Shortage 与预期不同 10 Cola 1D 各资源剩余 Failure Information Type Error 与预期相同 11 Beer 1D 没有5角 Failure Information Change Shortage 与预期不同 12 OrangeJuice 4C 各资源剩余 Failure Information Money Error 与预期相同 5. 编写并执行基于JUnit的测试用例。 6. 提交测试用例程
7、序和该程序运行结果最终画面。 7. 总结本次试验,并撰写实验报告。 程序流程图如图一所示:(流程图可复制粘贴到画图查看大图。) 图一 实验截图: 编写完测试用例,运行程序,源程序有六个错误,如图二所示: 图二 根据相应错误修改代码后测试通过,如图三所示: 图三 四、分析与讨论 通过此次实验,我初步学会了测试工具Junit的使用方法,发现使用测试工具可以给程序测试带来很大的方便,使我们更容易找到程序
8、的错误。 五、教师评语 签名: 日期: 成绩 程序源代码: 修改后的代码: package first; public class SaleMachine { private int countOfBeer, countOfOrangeJuice, countOfFiveCents, countOfOneDollar; private String[] typeOfGoods = {"Beer", "OrangeJuice"}; private String resultOfDeal; public SaleMachine() {
9、 initial(); } public void initial() { countOfBeer = 6; countOfOrangeJuice = 6; countOfFiveCents = 6; countOfOneDollar = 6; } public SaleMachine(int fiveCents, int oneDollar, int numOfBeer, int numOfOrange) //便于测试的初始化函数 { countOfFiveCents = fiveCents; countOfOneD
10、ollar = oneDollar; countOfBeer = numOfBeer; countOfOrangeJuice = numOfOrange; } public String currentState() { String state = "Current State\n" + "Beer: " + countOfBeer + "\n" + "Orange Juice: " + countOfOrangeJuice + "\n" + "5 Cents: " + countOfFiveCents
11、 + "\n" + "1 Dollar: " + countOfOneDollar; return state; } public String operation(String type, String money) //type是用户选择的产品,money是用户投币种类 { if(money.equalsIgnoreCase("5C")) //如果用户投入5角钱 { if(type.equals(typeOfGoods[0])) //如果用户选择啤酒 { if(countOfBeer>0) //如果还有啤酒
12、 { countOfBeer--; countOfFiveCents++; resultOfDeal = "Input Information \n" + "Type: Beer; Money: 5 Cents; Change: 0\n\n" + currentState(); return resultOfDeal; } else { resultOfDeal = "Failure Information \n" + "Beer Shortage"; return
13、 resultOfDeal; } } else if (type.equals(typeOfGoods[1])) //用户选择橙汁 { if(countOfOrangeJuice > 0) { countOfOrangeJuice--; countOfFiveCents++; resultOfDeal = "Input Information \n" + "Type: OrangeJuice; Money: 5 Cents; Change: 0\n\n" + currentSta
14、te(); return resultOfDeal; } else { resultOfDeal = "Failure Information \n" + "OrangeJuice Shortage"; return resultOfDeal; } } else { resultOfDeal = "Failure Information \n" + "Type Error"; return resultOfDeal; } } else if(money.e
15、qualsIgnoreCase("1D")) //如果用户投入一元钱 { //if(countOfFiveCents>0) //如果用户投入一元钱 //{ if(countOfFiveCents > 0) //如果用户有零钱 { if(type.equals(typeOfGoods[0])&&countOfBeer>0)//如果用户选择啤酒而且还有啤酒 { countOfBeer--; countOfFiveCents--; countOfOneDollar++; resu
16、ltOfDeal = "Input Information \n" + "Type: Beer; Money: 1 Dollar; Change: 5 Cents\n\n" + currentState(); return resultOfDeal; } else if (type.equals(typeOfGoods[1])&&countOfOrangeJuice>0)//如果用户选择橙汁而且还有橙汁 { countOfOrangeJuice --; countOfFiveCents --
17、 countOfOneDollar ++; resultOfDeal = "Input Information \n" + "Type: OrangeJuice; Money: 1 Dollar; Change: 5 Cents\n\n" + currentState(); return resultOfDeal; } else { if(type.equals(typeOfGoods[0])&&countOfBeer<=0) { resultO
18、fDeal = "Failure Information \n" + "Beer Shortage"; return resultOfDeal; } else if(type.equals(typeOfGoods[1])&&countOfOrangeJuice<=0) { resultOfDeal = "Failure Information \n" + "OrangeJuice Shortage"; return resultOfDeal; } else {
19、 resultOfDeal = "Failure Information \n" + "Type Error"; return resultOfDeal; } } } else { resultOfDeal = "Failure Information \n" + "Change Shortage"; return resultOfDeal; } } //else //{ //resultOfDeal = "Failure Informatio
20、n \n" + "Money Error"; //return resultOfDeal; //} //} resultOfDeal = "Failure Information \n" + "Money Error"; return resultOfDeal; } } 测试用例代码: package first; import junit.framework.TestCase; public class TestSaleMachine extends TestCase { public void testOperati
21、on1() //售货机各资源均有剩余,用户投币5角,选择啤酒 { SaleMachine saleMachine1 = new SaleMachine(); String expectedResult = "Input Information \n" + "Type: Beer; Money: 5 Cents; Change: 0\n\n" + "Current State\n" + "Beer: 5\n" + "Orange Juice: 6\n" + "5 Cents: 7\n" +
22、 "1 Dollar: 6"; assertEquals(expectedResult, saleMachine1.operation("Beer", "5C")); } public void testOperation2()//售货机没有啤酒剩余,用户投币5角,选择啤酒 { SaleMachine saleMachine2 = new SaleMachine(6,6,0,6); String expectedResult = "Failure Information \n" + "Beer Shortage"; assertEqua
23、ls(expectedResult,saleMachine2.operation("Beer", "5C")); } public void testOperation3() //售货机各资源均有剩余,用户投币5角,选择橙汁 { SaleMachine saleMachine3 = new SaleMachine(); String expectedResult = "Input Information \n" + "Type: OrangeJuice; Money: 5 Cents; Change: 0\n\n" + "Current
24、State\n" + "Beer: 6\n" + "Orange Juice: 5\n" + "5 Cents: 7\n" + "1 Dollar: 6"; assertEquals(expectedResult, saleMachine3.operation("OrangeJuice", "5C")); } public void testOperation4()//售货机没有橙汁,用户投币5角,选择橙汁 { SaleMachine saleMachine4 = new SaleMachine(6,6,6,0); St
25、ring expectedResult = "Failure Information \n" + "OrangeJuice Shortage"; assertEquals(expectedResult,saleMachine4.operation("OrangeJuice", "5C")); } public void testOperation5()//用户投入5角,选择非啤酒非橙汁 { SaleMachine saleMachine5 = new SaleMachine(6,6,6,6); String expectedResult = "Failure
26、 Information \n" + "Type Error"; assertEquals(expectedResult,saleMachine5.operation("Cola", "5C")); } public void testOperation6()//售货机有啤酒且有5角币,用户投币1元,选择啤酒 { SaleMachine saleMachine6 = new SaleMachine(6,6,6,6); String expectedResult = "Input Information \n" + "Type: Beer;
27、 Money: 1 Dollar; Change: 5 Cents\n\n" + "Current State\n" + "Beer: 5\n" + "Orange Juice: 6\n" + "5 Cents: 5\n" + "1 Dollar: 7"; assertEquals(expectedResult,saleMachine6.operation("Beer", "1D")); } public void testOperation7() //售货机没有啤酒有5角,用户投币1元,选择啤酒 { SaleMa
28、chine saleMachine7 = new SaleMachine(6,6,0,6); String expectedResult = "Failure Information \n" + "Beer Shortage"; assertEquals(expectedResult, saleMachine7.operation("Beer", "1D")); } public void testOperation8()//售货机有橙汁且有5角币,用户投币1元,选择橙汁 { SaleMachine saleMachine8 = new SaleMachine
29、6,6,6,6); String expectedResult = "Input Information \n" + "Type: OrangeJuice; Money: 1 Dollar; Change: 5 Cents\n\n" + "Current State\n" + "Beer: 6\n" + "Orange Juice: 5\n" + "5 Cents: 5\n" + "1 Dollar: 7"; assertEquals(expectedResult,saleMachine8.operation("Ora
30、ngeJuice", "1D")); } public void testOperation9()//售货机有5角没有橙汁,用户投币1元,选择橙汁 { SaleMachine saleMachine9 = new SaleMachine(6,6,6,0); String expectedResult = "Failure Information \n" + "OrangeJuice Shortage"; assertEquals(expectedResult,saleMachine9.operation("OrangeJuice", "1D")); }
31、 public void testOperation10()//售货机有5角,用户投币1元,选择非啤酒非橙汁 { SaleMachine saleMachine10 = new SaleMachine(6,6,6,6); String expectedResult = "Failure Information \n" + "Type Error"; assertEquals(expectedResult,saleMachine10.operation("Cola", "1D")); } public void testOperation11()//售
32、货机没有5角,用户投币1元 { SaleMachine saleMachine11 = new SaleMachine(0,6,6,6); String expectedResult = "Failure Information \n" + "Change Shortage"; assertEquals(expectedResult,saleMachine11.operation("Beer", "1D")); } public void testOperation12()//用户投币既不是5角也不是1元 { SaleMachine saleMachine12 = new SaleMachine(6,6,6,6); String expectedResult = "Failure Information \n" + "Money Error"; assertEquals(expectedResult,saleMachine12.operation("OrangeJuice","4C")); } }






