欢迎来到天天文库
浏览记录
ID:48732850
大小:247.50 KB
页数:20页
时间:2020-01-20
《TDD 测试驱动开发.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、UnitTestInJ2EEApplicationTim_wangPTSteam11/14/20089:51:11AMOverviewTDDIntroduction第一部分:TDD介绍什么是TDD为什么要使用TDD如何使用TDDOverviewWhatisTDD?TDD是Test-DrivenDevelopment(测试驱动开发)测试先行持续重构OverviewWhyTDD?TDD能够带来:减少开发周期中的反馈提高代码质量保证设计质量集中精力开发一个功能OverviewWhyTDD?TDD为最小的逻辑单元提供
2、了验证:确保每个方法都是可用的且已被测试过确保及时发现出现问题的模块添加或修改代码更容易频繁地运行测试迭代式递增开发不断重构以改善设计OverviewWhyTDD?TDD还能改善和验证设计:以客户端的视角编写测试为客户端提供了示例代码更注重接口的设计为了使测试容易,需要实现松散耦合更少的Debug时间OverviewWhyTDD?事物都有两面性:TDD的缺点…需要编写更多的代码OverviewHowtodoTDD?每当新增一个功能时:编写测试编写代码运行测试对代码做小的修正完成通过失败OverviewHowto
3、doTDD?先编写测试XP涉及两种测试:程序员测试和客户测试。测试驱动的编程(也称为测试为先编程)最常指第一种测试,至少我使用这个术语时是这样。测试驱动的编程是让程序员测试(即单元测试―重申一下,只是换用一个术语)决定您所编写的代码。这意味着您必须在编写代码之前进行测试.测试指出您需要编写的代码,从而也决定了您要编写的代码。您只需编写足够通过测试的代码即可以不用多,也不用少。XP规则很简单:如果不进行程序员测试,则您不知道要编写什么代码,所以您不会去编写任何代码。OverviewHowtodoTDD?如何先编写
4、测试这里我将举一个简单的例子,让您体会一下:假定我正在编写包含Person对象的系统。我希望在我问每个Person时,他/她能告诉我其年龄(作为整数)。OverviewHowtodoTDD?即使我还没有编写一丁点代码,但也该编写测试了。“什么?”,您可能会说,“我甚至不知道在测试什么,怎么编写测试?”答案很简单,您的确知道您在测试什么,只是不知道您所了解的内容,因为您不习惯按这样的方式进行思考。这就是我的意思。您确实还没有任何代码,但您脑海中应有Person对象的雏形。Person对象上应该有一个方法,该方法可
5、以用整数形式返回年龄。因为我最常使用Java语言,所以我用JUnit来编写程序员测试。清单1显示了我为Person对象编写的JUnit测试:OverviewHowtodoTDD?清单1.用于Person对象的JUnit测试packagecom.pts.testexample;importjunit.framework.TestCase;publicclassTC_PersonextendsTestCase{protectedPersonperson;publicTC_Person(Stringname){sup
6、er(name);}protectedvoidsetUp()throwsException{person=newPerson();}publicvoidtestGetAge(){intactual=person.getAge();assertEquals(0,actual);}protectedvoidtearDown()throwsException{}}OverviewHowtodoTDD?显然,我还没有Person类,所以运行该测试会出现问题—JUnit给出了一个红条。如果可以运行,并通过测试,则会显示一
7、个绿条。您的目标总是设法得到一个绿条。别忘了,JUnit的座佑铭是“得到绿条,使代码干净”(有时抱怨是难免的)。没问题。我将创建Person类,如清单2所示:清单2.Person类packagecom.pts.testexample;publicclassPerson{publicintgetAge(){return0;}}OverviewHowtodoTDD?现在,当运行这个测试时,测试通过,应该可以看到一个绿条。我必须从getAge()返回值,否则不会编译它。这里碰巧0最方便,0被认为是新的Person实例
8、的缺省值,所以工作正常。再次重申,我编写了通过测试所需的代码。能够使Person具有缺省的年龄值固然很好,但这对我的系统不会有太大帮助。Person需要比这更智能些。我真正所需要的是,Person拥有其生日,并能回答其当前的年龄。这意味着Person对象的年龄会随时间的推移而增长。OverviewHowtodoTDD?在进行编码前,将testGetAge重命名为testGetDefau
此文档下载收益归作者所有