您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 销售管理 > 浅析自动售货机程序测试
龙源期刊网浅析自动售货机程序测试作者:佘凤来源:《软件工程师》2015年第11期摘要:本文主要针对一个实际问题—自动售货机程序,进行分析、设计测试用例,并使用JUnit单元测试工具实现测试。关键词:自动售货机程序;单元测试;JUnit中图分类号:TP273文献标识码:A1引言(Introduction)自动售货机处理单价为5角钱的饮料。程序流程图如图1所示。功能如下:(1)若投入5角钱或1元钱的硬币,按下“橙汁”或“啤酒”按钮,则送出相应饮料。(2)若售货机没有零钱,则显示“零钱找完”的红灯亮,此时再投入一元硬币并按下按钮后,不送出饮料并且退出1元硬币。(3)若有零钱找,则显示“零钱找完”的红灯灭,送出饮料并退还5角硬币。图1程序流程图Fig.1Programflowchart2问题分析(Problemanalysis)自动售货机业务中共有五个条件和五个结果,如表1所示。表1自动售货机原因和结果Tab.1Automaticvendingmachinecauseandresult编号原因编号结果C1售货机有零钱找E1零钱找完:当售货机中没有零钱的时候就有亮红灯C2投入1元硬币E2退还1元硬币:投入1元且售货机中没有零钱可找的时候C3投入5角硬币E3退还5角硬币:投入1元且售货机中有零钱可找的时候龙源期刊网送出啤酒饮料使用因果图法,它能够生成没有重复性的且发现错误能力强的测试用例,而且对输入、输出同时进行了分析,考虑输入的组合以及输出对输入的依赖关系。画出因果图,如图2所示。图2因果图Fig.2Causeandeffectdiagram中间状态是导出结果的进一步原因。中间状态如表2所示。表2中间状态Tab.2Intermediatestate编号中间状态操作11应该找5角钱零钱状态投入1元硬币且按下饮料按钮12选商品状态按下“橙汁”或“啤酒”按钮13能够找5角钱零钱状态应找5角零钱并且售货机有零钱找14钱已付清钱已付清3自动售货机程序测试(Thevendingmachineprogramtest)JUnit用于开发人员进行单元测试,适合一边编程,一边测试,可尽早纠正编程错误,减小纠正代价。根据因果图分析程序,有14种测试情况,设计测试数据,使用JUnit工具进行自动售货机程序测试。说明:售货机程序初始化时:Beer:10;OrangeJuice:10;5Cents:10;1Dollar:10说明:5C代表5角钱,1D代表1元钱,Beer代表啤酒,OrangeJuice代表橙汁。(1)各资源均有剩余,用户投币5角,选择啤酒。publicvoidtestOperation1(){龙源期刊网=InputInformation\n+Type:Beer;Money:5Cents;Change:0\n\n+CurrentState\n+Beer:9\n+OrangeJuice:10\n+5Cents:11\n+1Dollar:10;assertEquals(expectedResult,obj.operation(Beer,5C));}(2)各资源均有剩余,用户投币5角,选择橙汁。publicvoidtestOperation2(){StringexpectedResult=InputInformation\n+Type:OrangeJuice;Money:5Cents;Change:0\n\n+CurrentState\n+Beer:10\n+OrangeJuice:9\n+5Cents:11\n+1Dollar:10;assertEquals(expectedResult,obj.operation(OrangeJuice,5C));}(3)各资源均有剩余,用户投币1元,选择啤酒。publicvoidtestOperation3(){StringexpectedResult=InputInformation\n+Type:Beer;Money:1Dollar;Change:5Cents\n\n+CurrentState\n+Beer:9\n+OrangeJuice:10\n+5Cents:9\n+1Dollar:11;assertEquals(expectedResult,obj.operation(Beer,1D));}(4)各资源均有剩余,用户投币1元,选择橙汁。publicvoidtestOperation4(){StringexpectedResult=InputInformation\n+Type:OrangeJuice;Money:1Dollar;Change:5Cents\n\n+CurrentState\n+Beer:10\n+OrangeJuice:9\n+5Cents:9\n+1Dollar:11;assertEquals(expectedResult,obj.operation(OrangeJuice,1D));龙源期刊网}(5)没有零钱,用户投币1元,选择啤酒。publicvoidtestOperation5(){SaleMachineobj=newSaleMachine(0,10,10,10);StringexpectedResult=FailureInformation\n+ChangeShortage;assertEquals(expectedResult,obj.operation(Beer,1D));}(6)没有零钱,用户投币1元,选择橙汁。publicvoidtestOperation6(){SaleMachineobj=newSaleMachine(0,10,10,10);StringexpectedResult=FailureInformation\n+ChangeShortage;assertEquals(expectedResult,obj.operation(OrangeJuice,1D));}(7)没有啤酒,用户投币5角,选择啤酒。publicvoidtestOperation8(){SaleMachineobj=newSaleMachine(10,10,0,10);StringexpectedResult=FailureInformation\n+BeerShortage;assertEquals(expectedResult,obj.operation(Beer,5C));}(8)没有啤酒,用户投币1元,选择啤酒。publicvoidtestOperation7(){SaleMachineobj=newSaleMachine(10,10,0,10);龙源期刊网=FailureInformation\n+BeerShortage;assertEquals(expectedResult,obj.operation(Beer,1D));}(9)没有橙汁,用户投币5角,选择橙汁。publicvoidtestOperation9(){SaleMachineobj=newSaleMachine(10,10,10,0);StringexpectedResult=FailureInformation\n+OrangeJuiceShortage;assertEquals(expectedResult,obj.operation(OrangeJuice,5C));}(10)没有橙汁,用户投币1元,选择橙汁。publicvoidtestOperation10(){SaleMachineobj=newSaleMachine(10,10,10,0);StringexpectedResult=FailureInformation\n+OrangeJuiceShortage;assertEquals(expectedResult,obj.operation(OrangeJuice,1D));}(11)各资源均有剩余,用户投币错误,选择啤酒。publicvoidtestOperation11(){StringexpectedResult=FailureInformation\n+MoneyError;assertEquals(expectedResult,obj.operation(Beer,1C));}(12)各资源均有剩余,用户投币错误,选择橙汁。publicvoidtestOperation12(){龙源期刊网=FailureInformation\n+MoneyError;assertEquals(expectedResult,obj.operation(OrangeJuice,1C));}虽然在实际情况中不会有除啤酒和橙汁以外的选择,但是为了测试单元模块的所有输入输出情况,需要编写检测饮料类型的测试用例。(13)各资源均有剩余,用户投币5角,选择可口可乐。publicvoidtestOperation13(){StringexpectedResult=FailureInformation\n+TypeError;assertEquals(expectedResult,obj.operation(Coca-cola,5C));}(14)各资源均有剩余,用户投币1元,选择可口可乐。publicvoidtestOperation14(){StringexpectedResult=FailureInformation\n+TypeError;assertEquals(expectedResult,obj.operation(Coca-cola,1D));}运行测试,查看测试结果。绿色表示测试通过,只要有一个测试未通过,会显示红色并列出未通过测试的方法。测试结果如图3所示。图3测试结果图Fig.3Testresultchart4结论(Conclusion)单元测试是验证代码行为是否满足预期的有效手段之一。不可否认,做测试是件很枯燥无趣的事情,而一遍又一遍的测试是让人生畏的工作。单元测试工具JUnit使这一切变得简单艺术起来。JUnit是Java中知名度最高的单元测试工具。JUnit设计非常小巧,但能却非常强大。龙源期刊网本文主要针对一个实际问题,编写基于JUnit的单元测试用例;并在JUnit环境下设计并执行测试用例。实现自动售货机程序的测试。参考文献(References)[1]于艳华,王素华.软件测试项目实战[M].北京:电子工业出版社,2013.[2]武剑洁,陈传波,肖来元.软件测试技术基础[M].武汉:华中科技大学出版社,2014.[3]吕云翔,王洋,肖咚.软件测试案例教程[M].北京:机械工业出版社,2015.作者简介:佘凤(1976-),女,硕士,软件设计师,讲师.研究领域:软件测试.
本文标题:浅析自动售货机程序测试
链接地址:https://www.777doc.com/doc-5304527 .html