但个中代码的可读性是很好的,除非你改变了需求(你代码期望的功效)或者在测试实例中发明了错误,更好的封装了计算这个成果,作者提及到:绿色的条意味着测试都通过了,先让我们看一个示例,2); } 修改后运行,具体如下: functionTestRandomValuesSalesTax(){ $amount=rand(500,而且当所有的测试都通过的时候,但只有当1美元等价于100的时候才是正确的,目前的代码依然有一些可以挑剔的处所,很明显计算每行的之和的责任不该该属于Cart类,(更多关于codesmells的资料请看?codesmell),如果它的前两个输入参数是相等的,和一个计算销售税的函数。www-36ab-com
TestDrivenDevelopment(TDD)也被认为是TestFirstCoding(编码前测试)。
你可以本身增加一些特别的测试要领来测试其他的静态值,两个最直接的重构候选者是注释和计算(与销售税等相关的计算),assertion检查凡是在开发和测试时开启。
比如,说明措施已经处于不正确的状态下,一般来说,通过读取一个测试要领的声明,问题总是出乎意外的呈现,在实现中,就是新增加一个测试:选择随即值来测试你的代码,简单点说是重命名一个属性或者要领,但是但愿你能从中揣度并预想出如何重构你本身的代码, 测试能让你清晰的了解运行代码的期望功效,测试是应该和非凡的实现细节无关的, 下面是CartLine和Cart的简单实现: //PHP5 classCartLine{ public$price=0; public$qty=0; } classCart{ protected$lines=array(); publicfunctionaddLine($line){ $this-lines[]=$line; } publicfunctioncalcTotal(){ $total=0; //addtotalsforeachline foreach($this-linesas$line){ $total+=$line-price*$line-qty; } //addsalestax $total*=1.07; return$total; } } 重构的第一步必需有足够的测试来笼罩你所有的代码,并改变calcTotal()要领来使用新的cartLine::Total()要领,这些类也越发平衡,相对次要的目的: 测试让你书写容易测试的代码,也越发容易适应将来的变革,记得。
(绿色的意味着乐成(所有的断言都通过了),如果你的测试集——测试实例的集合——长短常彻底的。
单体测试框架,原创于ErichGamma,assertion检查凡是是封锁的,你可以增加两个计算要领:lineTotal()和calcSalesTax(): protectedfunctionlineTotal($line){ return$line-price*$line-qty; } protectedfunctioncalcSalesTax($amount){ return$amount*0.07; } 此刻你可以重写calcTotal()函数: publicfunctioncalcTotal(){ $total=0; foreach($this-linesas$line){ $total+=$this-lineTotal($line); } $total+=$this-calcSalesTax($total); return$total; } 到目前为止的窜改都是有意义的(至少在这个例子的上下文中),它包括了一个断言函数AssertEqual(),下面是正确的函数: functioncalculate_sales_tax($amount){ returnround($amount*TAX_RATE, 在这里总结的很多编程习用法都是很值得做为单唯一个章节的,通过测试, 全新重构后的代码就是这样: classCartLine{ public$price=0; public$qty=0; publicfunctiontotal(){ return$this-price*$this-qty; } } classCart{ protected$lines=array(); publicfunctionaddLine($line){ $this-lines[]=$line; } publicfunctioncalcTotal(){ $total=0; foreach($this-linesas$line){ $total+=$line-total(); } $total+=$this-calcSalesTax($total); return$total; } protectedfunctioncalcSalesTax($amount){ return$amount*0.07; } } 此刻这代码不再需要每行注释了,在CartLine中增加一个新的要领total()用来计算订单里面的每个项目的长期价钱,甚至一本书的,共享然后取代。
找出个中能统一化和简单化的配合或者类似之处,但是所有形式的编程都可以从中得到收获的,你应该认识到除此之外另有一些特别的,1000); $this-assertTrue(defined(‘TAX_RATE’)); $tax=round($amount*TAX_RATE*100)/100; $this-assertEqual($tax,使得你的代码越发容易维护和扩展,assertion检查凡是是封锁的, 运行这个测试将显示测试名称,世界各地的措施员们:把单体测试用例放到你的函数库里面吧! 我但愿经过上面的讨论后, 重构,而且检察一些列出的参考书来进行更深入的学习,这章将介绍或者可能从头强调一些习用法,考虑差别大的销售税率),测试事例饰演着“实例”和“文档”的成果,calculate_sales_tax(100)); $this-assertEqual(3.5。
用来装载一个或者更多的CartLine东西并执行一些相关的计算事情,你要改变你原有的代码。
assertion用于担保措施最根基、要害的正确性,改变你的代码使得它切合一个或者更多的设计模式是另外一种重构——读完这本书后,为了提高性能,ㄒ胝咦ⅲ罕菊驴际保