下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
预备知1.简JUnitJava语言事实上的标准单元测试库。JUnit的易用性无疑是它受欢迎的主要原因。也许你会这样想:它做的事情不多,仅仅是做一些测试然后报告结果,JUnit应该是很简单的。JUnit4.x是最初由ErichG 和KentBeck编写的,能够自动化测试Java代码的框架,JUnit的方法失败,方法之间也不存在相互依赖的关系,彼此是独立的。JUnit4是该库以来最具里程碑意义的一次发布它的新特性主要是通过采用Java5中的标(Annotation而不是利用子类、然而,JUnitJUnit所采用的思想和技术,而不是框架JUnit中实现。JUnit本身的最bug;而更重要的是,Java不断在发展。Java语言现在支持泛型(RawType)、枚举(Enum)、可变新版本的JUnit,它利用Java5的新特性(尤其是注释)的优势,使得单元测试比起用最初的JUnit来说更加简单。用Beck的话来说,“JUnit4的是通过进一步简化JUnit,鼓励的开发人员编写的测试。”JUnit4尽管保持了与现有JUnit3.8测试套件的向后兼容,但是它仍然承诺是自JUnit1.0以来Java单元测试方面最重大的改进。3.8JUnit1+1importjunitpublicclassAdditionTestextendsTestCase{privateintx=1;privateinty=publicvoidtestAddition(){intz=x+y;assertEquals(2,z);}}4.XJUnit4@TestimportimportjunitpublicclassAdditionTestextendsTestCase{privateintx=1;privateinty=@TestpublicvoidtestAddition(){intz=x+y;}}testFoo()、testBar(),等等。而在3.8中如果你的方法不是以test开头的,将不被解释为测试方法。这允许您遵循最适合您的应用程序名约定通过继承TestCase@Test来注释测试方法就可以将测试方法放到任何类中但是您需要导入junit.Assert类以各种assertimportorg.junit.Assert;publicclassAdditionTest{privateintx=1;privateinty=@Testpublicvoidaddition(){intz=x+y;Assert.assertEquals(2,z);}}importimportstaticorg.junit.Assert.assertEquals;publicclassAdditionTest{privateintx=1;privateinty=@Testpublicvoidaddition(){intz=x+y;}}了。Eclipse准创建一个新的工程,并增加JUnit到库到项目的BuildPath创建一个普通创建名字为"MyClass"的Java文件publicclassMyClass牋爌ublicintmultiply(intx,inty)returnx}创建测创建测试套SetUpTearDown及断言方3.8JUnit3测试运行程序(testrunner)setUp()方法。该方法一般会初始化字段,打开日志记录,重置环境变量,等等。例如,下面是摘自XOM的XSLTransformTest中的setUp()方法:protectedvoidsetUp()System.setErr(newPrintStream(newByteArrayOutputStream()));inputDir=newFile("data");inputDir=newFile(inputDir,"xslt");inputDir=newFile(inputDir,"input");}JUnit3tearDown()XOM中为消耗大量内存的测试所protectedvoidtearDown(){doc=null;}4.X作的方法不再需要叫做setUp(),只要用@Before注释来指示即可,如下所示:@Beforeprotectedvoidinitialize()inputDir=newFile("data");inputDir=newFile(inputDir,"xslt");inputDir=newFile(inputDir,}@Before@BeforeprotectedvoidfindTestDataDirectory(){inputDir=newFile("data");inputDir=newFile(inputDir,"xslt");inputDir=newFile(inputDir,"input");}@BeforeprotectedvoidredirectStderr()}JUnit4@After@Afterprotectedvoiddispose (){doc=null;}@Before一样,也可以用@After将根据需要自动为您调用这些方法。超类中的@Before方法在子类中的@Before方法之前被法之前被调用。否则,多个@Before或@After方法的相对顺序就得不到保证。3.8系列,每一个类都继承了一个叫做TestCase的类,而TestCase的父类是Assert4.X中,测试类可以是一个普通类,也可以去继承一个类或者实现一个接口要实现测试,只需要在要测试的方法之前加@Test注释same相同注释@Testpublicvoid@Beforepublicvoid@Afterpublicvoid@BeforeClasspublicvoid@AfterClasspublicvoid1新的断JUnit4assert()publicstaticvoidassertEquals(Object[]expected,Object[]actual)publicstaticvoidassertEquals(Stringmessage,Object[]expected,Object[]actual)套件范围的初始JUnit4JUnit3setUp()tearDown()方法。任何用@BeforeClass注释的方法都将在该类中的测试方法运行之前刚好运行一次,而任何用@AfterClass注释的方法都将在该类中的所有测试都运行之后刚好运行一次。者还有一些对于初始化和事情安排来说比较昂贵的其他资源。不要在每个测试之前都重新创建我测试用第库代码的错处理我常欢在测开始前重向ye.er//Thisclasstestsalotoferrorconditions,//XalanannoyinglylogstoSystem.err.Thishides//beforeeachtestandrestoresitaftereachtest.privatePrintStreamsystemErr;@BeforeClassprotectedvoidredirectStderr(){systemErr=System.err;//Holdontotheoriginalvalue}@AfterClassprotectedvoidtearDown()//restoretheoriginalvalue}的独立性,并引入非预期的。如果一个测试在某种程度上改变了@BeforeClass所初始化的(例如,LimeWire测试套件运行时间超过两小测试异tryfail()publicvoidtestDivisionByZero(){try{intn=2/0;fail("Dividedbyzero!");}catch(ArithmeticExceptionsuccess){}}被执行。在JUnit4中,您现在可以编写抛出异常的代码,并使用注释来该异常是预期的publicvoiddivideByZero(){intn=2/}异常的详细消息或其他属性,则仍然需要使用旧式的try-catch样式。可以忽略到测周期。或者也许是一个因为超出您的控制范围的原因而失败的测试。例如,W3CXInclude测试JavaUnicode编码的自动识别。不必老是被迫盯住那些红色波浪线,这类测试可以被注释为@Ignore,如下所示://Javadoesn'tyet//theUTF-32BEandUTF32LEencodings@IgnorepublicvoidtestUTF32BE()Fileinput=newFile("data/xinclude/input/UTF32BE.xml");doc=builder.build(input);result=expectedResult=builder.build(newFile(outputDir,"UTF32BE.xml"));assertEquals(expectedResult,result);}时间测FailureFailure指的是由于预期的结果与实际运行的测试的结果不同而导致的實際運行單元的結果不同发现Faulure,你就要去检查你的测试方法或者是被测试方法中编写的逻辑是否有误。Error指的是编写程序时没有考虑到的问题。在执试的断言之前,程序就因为某种类型的意ArrayIndexOutOfBoundception,这个时候程序就会报出Error,程序将无法运行下去,提前结importpublicclassObjectArrayTestTestCasepublicvoidtestAdd()牋牋 ObjectArrayobjArr=牋牋牋ObjecttestObj=newObject();Objectobj=objArr.setObject(0,assertEquals(testObj,牋}如果执行这个测试的话Eclipse会提示你创建一个名字为ObjectArray的类,在其中要求你创建一个setObject的方法。publicclassObjectArraypublicObjectsetObject(inti,ObjecttestObj){牋eturn牋}如果现在你来运试的话会出现以下类似的界面 assertEquals(testObj,看这里的断言,Objectobj这一行很明显是可以testObjcnullfailure产生。publicclassObjectArrayObjectpublicObjectsetObject(intiObjecttestObj){牋eturn牋}那么为什么会产生这样的 assertEquals(testObj,时候首先执行Object 这句在这一句中出现了publicstaticvoidmain(String[] 牋EasyIDEEasyMockJunitEasy从EasyMock到主页上EasyMock,把得到的easymock.jar增加到你的classpath中。JavaJavaMockTest,创建下面的这些类。 publicenumPosition{BOSS,PROGRAMMER, publicclassPositionExceptionextendsRuntimeException{privatestaticfinallongserialVersionUID=1L;publicPositionException(Stringmessage){} publicclassCalcMethodExceptionextendsRuntimeException{privatestaticfinallongserialVersionUID=1L;publicCalcMethodException(Stringmessage){} publicinterfaceICalcMethod{ doublecalc(Position} publicclass privateICalcMethodcalcMethod;privatePositionposition;publicvoidsetCalcMethod(ICalcMethodcalcMethod){this.calcMethod=calcMethod;}publicvoidsetPosition(Positionposition){this.position=position;publicdoublecalc(){ifthrownewCalcMethodException("CalcMethodnotyet}ifthrownewPositionException("Positionnotyet}return}使用Eclipse的JUnit功能为 下面就是一个使用EasyMock importstaticorg.junit.Assert.assertEquals;importstaticorg.junit.Assert.fail; importorg.easymock.EasyMock;importorg.junit.Before;importorg.junit.Test;public eCalculatorTestprivateICalcMethodcalcMethod; eCalculatorcalc;publicvoidsetUp()throwsExceptioncalcMethod=EasyMock.createMock(ICalcMethod.class);calc=new }publicvoidtestCalc1()//Settinguptheexpectedvalueofthemethodcallcalc//Setupisfinishedneedtoactivatethemocktry{fail("Exceptiondidnot}catch(PositionExceptione)}assertEquals(70000.0,calc.calc());assertEquals(70000.0,calc.calc());assertEquals(50000.0,calc.calc());}@Test(expected=CalcMethodException.class)publicvoidtestNoCalc(){}@Test(expected=PositionException.class)publicvoidtestNoPosition(){}@Test(expected=PositionException.class)publicvoidtestCalc2(){//SettinguptheexpectedvalueofthemethodcallcalcPositionException("Don'tknowthis//Setupisfinishedneedtoactivatethemock}expect方法告知EasyMock希望得到一个特定的方法,使用一些特定的参数,addReturn为某一测试1:测试网页是否WebConversationgetResponseWebConversationwebConversation=newWebConversation();牋牋牋牋牋牋"Error。测试2:Get、GetMethodWebRequestPostMethodWebRequestGetPostWebConversationwebConversation=newWebRequestrequest=newGetMethodWebRequest("");WebResponseresponse=webConversation.getResponse(request);测试3:取得表格信设计
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 优化方案高考数学文总复习人教A版省公共课全国赛课获奖教案
- 幼儿园大班语言好担心活动幼教教案
- 小学语文六年级下册向往奥运教材简析教案
- 小区物业管理服务内容和范围试卷教案
- 汕头市濠江区KV滨西线开弟分支施工方案试卷教案
- 危重症患儿的识别教案
- 销售经理案场管理专题培训教案
- 《高考导航》届新课标数学理一轮复习平面向量基本定理坐标表示教案(2025-2026学年)
- 中年级会计职称考试中级会计实务科目涉考点总结教案
- 学生安全教育日课件
- 新生儿溶血症课件
- 2025年国家gcp培训考试题库一套及答案
- 内镜下逆行阑尾炎治疗术
- 2025新版国家心力衰竭诊断和治疗指南
- 口腔种植无菌操作规范
- 上海延安中学2026届中考语文考前最后一卷含解析
- 部队安全驾驶课件
- 征集推广活动方案
- DB42T 1049-2015 房产测绘技术规程
- 2025年4月自考03450公共部门人力资源管理试题
- 堆煤场安全管理制度
评论
0/150
提交评论