手机版

php设计模式编程习惯介绍第1/3页

时间:2021-11-26 来源:互联网 编辑:宝哥软件园 浏览:

这里总结的很多编程习惯用法都值得作为一章甚至一本书来使用。你应该把这一章作为PHP模式设计用法的介绍,并查看一些列出的参考书,以便进一步学习。测试代码可能没有测试代码重要。好的测试可以加速开发。起初,这句格言可能与你的直觉相矛盾。你可能会断言测试是自由的障碍。相反,如果您完全运行这些测试来检查软件的公共接口,您可能会改变系统的内部执行,而不会改变(或者更糟,破坏)原始应用软件。并且测试你的公共接口的准确性和正确性,让自己随意更改一些代码的内部工作,确保你的软件是正确的,没有bug。在讨论更多关于测试的好处之前,让我们看一个例子。本书所有的测试用例都使用PHP测试框架——SimpleTest。这个测试框架可以在http://simpletest.org获得。考虑以下代码?php//PHP4//主题codedefine('TAX_RATE ',0.07);函数calculate _ sales _ TAX($ amount){ round($ amount * TAX _ RATE,2);}//包含test library require _ once ' simple test/unit _ tester . PHP ';require _ once ' simpletest/reporter . PHP ';testclass TestingTestCase扩展了UnitTestCase { function TestingTestCase($ name=' '){ $ this-UnitTestCase($ name);}函数TestSalesTax(){ $ this-asserteqal(7,calculate _ sales _ tax(100));}}//运行测试$ Test=new TestingTestCase(' Testing Unit Test ');$test-run(新的HTMl Reporter());上面的代码首先定义了一个常量——TAX_RATE和一个计算销售税的函数。然后,代码包含使用SimpleTest框架的必要组件:单一测试本身和显示测试结果的“报告器”模块。类TestingTestCase继承自SimpleTest框架的UnitTestCase类。通过扩展UnitTestCase,TestingTestCase类中所有以Test开头的方法都将被视为测试用例——,从而为调试代码和断言结果创造条件。TestingTestCase定义了一个测试TestSalesTax(),它包含一个断言函数AssertEqual()。如果它的前两个输入参数相等,它将返回true,否则将返回false。(如果要显示assertEqual()失败的消息,可以传入三个参数,如下所示:$ this-assert equal (7,calculate _ sales _ tax (100),“增值税计算失败”))。代码的最后两行创建了这个测试用例的实体,并使用HtmlReporter运行它。您可以访问此网页来运行这个简单的测试。运行这个测试将显示测试的名称、失败断言的细节和一个摘要栏。(绿色表示成功(所有断言都通过),红色表示失败(至少有一个断言失败)。)(断言是软件开发中常用的调试方法,很多开发语言都支持。在实现中,断言是程序中的一条语句,它检查一个布尔表达式,一个正确的程序必须保证这个布尔表达式的值为真;如果该值为false,则表示程序处于不正确的状态,系统将给出警告或退出。一般来说,断言是用来保证程序最基本、最关键的正确性的。断言检查通常在开发和测试期间打开。为了提高性能,断言检查通常在软件发布后关闭。)注意:(断言是软件开发中常见的调试方法,很多开发语言都支持。在实现中,断言是程序中的一条语句,它检查一个布尔表达式,一个正确的程序必须保证这个布尔表达式的值为真;如果该值为false,则表示程序处于不正确的状态,系统将给出警告或退出。一般来说,断言是用来保证程序最基本、最关键的正确性的。断言检查通常在开发和测试期间打开。

为了提高性能,断言检查通常在软件发布后关闭。)上面的代码有一个(故意的)错误,所以操作无法通过。显示结果如下:

像Calculate_sales_tax()这样简单的单行函数出了什么问题?您可能已经注意到这个函数不返回结果。下面是正确的函数:函数calculate _ sales _ tax($ amount){ return round($ amount * tax _ rate,2);}修改后运行并通过测试。

但是一个简单的测试并不能保证代码是稳定的。例如,您将calculate_sales_tax()函数更改为calculate _ sales _ tax($ amount){ return 7;},代码会通过测试,但只有当一美元等于100时才是正确的。您可以添加一些额外的测试方法来测试其他静态值。函数testsomemore sales tax(){ $ this-asserteqal(3.5,calculate _ sales _ tax(50));}或者更改函数testsalesax()来验证第二个(和第三个,等等。)值,如下所示,函数testsalesax(){ $ this-assert equal(7,calculate _ sales _ tax(100));$ this-asserteqal(3.5,compute _ sales _ tax(50));}到目前为止,一个更好的方法是添加一个新的测试:选择随机值来测试您的代码。具体如下:函数testrandomvaluesalestax(){ $ amount=rand(500,1000);$this-assertTrue(已定义(' TAX _ RATE '));$ TAX=round($ amount * TAX _ RATE * 100)/100;$ this-asserteqal($ tax,calculate _ sales _ tax($ amount));} testrandomvaluesalestax()引入了方法assertTrue(),如果传入的第一个变量等于boolean true,则assertTrue()会传递。(与方法assertEqual()类似,方法assertTrue()在接受可选的额外值后将返回一条失败消息)。因此,TestRandomValuesSalesTax()首先认为常数TAX_RATE已经定义,然后用这个常数计算随机选择数量的税。但是,TestRandomValuesSalesTax()也有一个问题:它严重依赖calculate_sales_tax()方法。测试应该独立于具体的实现细节。一个更好的测试应该只建立一个合理的分界线。下一个测试假设销售税永远不会超过20%。函数testrandomvaluessalesestax(){ $ amount=rand(500,1000);$ this-assertTrue(calculate _ sales _ tax($ amount)$ amount * 0.20);}确保代码正常工作是测试的主要目的,但是在测试代码时,您应该意识到还有一些额外的相对次要的目的:测试允许您编写易于测试的代码。这使得代码松散耦合,设计复杂,模块化好。测试可以让你清楚地了解运行代码的预期结果,让你从一开始就关注模块的设计和分析。通过测试还会让你考虑所有可能的输入和相应的输出。测试可以快速理解编码的目的。换句话说,测试用例发挥了“实例”和“文档”的功能,准确地展示了如何构建类、方法等。在这本书里,我有时会通过一个测试用例来演示代码的预期功能。通过阅读测试方法的声明,您可以清楚地了解代码是如何运行的。测试用例定义了代码如何在显式约定下工作。最后,如果您的测试集——和测试用例集——非常彻底,并且当所有测试都通过时,您可以说您的代码是完整的。有趣的是,这种观点也恰好是测试驱动开发的特征之一。测试驱动开发也被称为测试优先编码。测试优先编码是将测试向前推进一步的方法:在编写任何代码之前编写测试。你可以从http://xprogramming.com/xpmag/testFirstGuidelines.htm,下载一篇好的、简洁的关于TDD的总结文章和一本好的关于策略的入门书,——Kent Beck的书《Test Driven Development:By Example》(这本书里面的例子都是用JAVA开发的,但是代码的可读性很好,题目的介绍和讲解都很好)。注:敏捷开发最近,单一测试——,尤其是映射驱动开发——,已经和敏捷开发方法论紧密相连,比如极限编程(XP)。极限编程的重点是快速、重复地向客户发送功能代码,将不断变化的客户需求作为开发过程中必不可少的一部分。

以下是一些关于学习敏捷编程的在线资源:功能测试本书中的大多数测试示例都用于测试面向对象的代码,但是所有形式的编程都可以从中受益。单片测试框架,如PHPUnits和SimpleTest,也可以很容易地用来测试功能函数。例如,上面的SimpleTest示例用于测试calculate_sales_tax()函数。全世界的程序员:把单个测试用例放到你的函数库里!希望经过以上讨论,大家也将被引向——“测试感染”!(该术语源于Erich Gamma,详情请参考文章《http://junit.sourceforge.net/doc/testinfected/testing.htm》。)就像Gamma写的那样,一开始你可能会觉得测试非常繁琐,但是当你为你的程序构建一个广泛的测试集时,你会对你的代码更有信心!阅读下一页的全文。

版权声明:php设计模式编程习惯介绍第1/3页是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。