关于单元测试:PHP中的测试驱动开发

关于单元测试:PHP中的测试驱动开发

Test Driven Development in PHP

我是使用PHP的网络开发人员。 我在C#桌面应用程序中使用"测试驱动开发"的经验有限。 在这种情况下,我们将nUnit用于单元测试框架。

我想开始在新项目中使用TDD,但是我真的不确定从哪里开始。

您对基于PHP的单元测试框架有什么建议?对于TDD概念的新手,有哪些好的资源?


我同时使用了PHPUnit和SimpleTest,并且发现SimpleTest更易于使用。

就TDD而言,从最纯粹的意义上来说我还没有多大运气。我认为这主要是时间/纪律问题。

在事实之后添加测试是很有用的,但是我最喜欢做的事情是使用编写SimpleTest测试来测试必须修复的特定错误。这使得验证事物是否确实固定并保持固定非常容易。


我强烈建议肯特·贝克(ISBN-10:0321146530)进行"测试驱动开发"。它不是专门为PHP编写的,但是概念已经存在,应该可以轻松地翻译成PHP。


PHPUnit是一个标准,但有时也会令人不知所措,因此,如果您发现它太复杂了,请查看phpt以开始使用。在其中编写测试非常非常容易。对于任何程序员来说,都是没有脑子的。

并回答您的TDD问题-我不确定TDD是否在PHP空间中使用了widley。我可以看到快速的应用程序开发和TDD有点冲突(严格来说是恕我直言)。 TDD要求您全面了解所构建的内容,并预先编写测试,然后实施代码以使测试通过。

因此,例如,我们要做的是在完成后编写大量测试。这并不总是最好的方法,因为您有时最终会通过虚假测试,但并不是真正有用,但至少可以扩展。在内部,我们继续进行测试,并基本上针对发现的每个错误编写测试。这就是它变得更牢固的方式。


我个人更喜欢SimpleTest。有一个命令行测试运行程序和基于Web的测试运行程序,甚至还有一个Eclipse插件,可让您从IDE本身运行单元测试。我发现Zend与PHPUnit的连接更难工作,尤其是在调试器中。

我们内部使用SimpleTest的方式是使用我们自己编写的连续集成脚本。每次我们向SVN签入功能时,我们都会包含单元测试。 CI脚本大约每隔一个小时运行一次,并调用运行我们所有单元测试的命令行PHP脚本。如果有任何休息,我会收到一封电子邮件。这是减少系统错误的好方法。

但是,您可以轻松地使用Phing之类的工具在cron作业上或通过SVN检入挂钩自动运行测试。

实际上,如果您想直接与我联系以寻求进一步的帮助,可以通过SO上的个人资料与我联系。我很乐意为您提供帮助。


SimpleTest是一个很棒的系统。我大约5个月前开始使用它,从未听说过TDD,SimpleTest易于学习,但功能仍然很强大。至于资源,我目前正在阅读肯特·贝克(Kent Beck)的《 TDD示例》,这很好。


您应该看到的另一个现代工具是Codeception。它比PHPUnit简化得多,并包含了场景驱动的方法,这对于从测试生成文档非常有用。


您应该研究PHPUnit,它看起来很像nUnit。


测试驱动开发是一种始终在代码之前编写测试的方法。
您应该先学习PHPUNIT才能开始TDD开发。然后,在创建函数时,您应始终考虑函数如何失败并在phpunit中编写测试用例,最后您应编写代??码以通过测试。它将是一种新方法,因此从一开始就不会有什么困难,但是一旦您习惯了它,就会发现它特别适用于开发后的bug和编码风格。您可以阅读本分步指南以了解此概念。

永远记住如果测试是在开发之后编写的,那么它们是无用的。因此,如果您想编写单元测试,则必须使用TDD


推荐阅读

    linux重置网络命令?

    linux重置网络命令?,网络,地址,工作,环境,系统,信息,标准,设备,命令,工具,lin

    linux高级网络命令?

    linux高级网络命令?,网络,地址,系统,工作,信息,管理,设备,电脑,命令,目录,Lin

    linux网络参数命令?

    linux网络参数命令?,网络,地址,系统,工作,信息,工具,情况,服务,状态,命令,Lin

    linux下创建网络命令?

    linux下创建网络命令?,网络,地址,工作,系统,管理,命令,名字,最新,项目,设备,l

    linux命令行链接网络?

    linux命令行链接网络?,网络,系统,地址,工作,工具,最新,网址,数据,信息,环境,l

    linux网络速度命令?

    linux网络速度命令?,网络,工作,地址,系统,电脑,命令,网卡,信息,通讯,设备,Lin

    linux网络开启命令行?

    linux网络开启命令行?,网络,地址,系统,环境,设备,工作,通用,服务,数据,网址,

    linux的配置网络命令?

    linux的配置网络命令?,地址,系统,网络,代码,服务,管理,密码,信息,基础,命令,l

    linux下查网络命令?

    linux下查网络命令?,网络,系统,地址,工具,状态,管理,基础,服务,中心,信息,lin

    linux网络命令查询?

    linux网络命令查询?,信息,网络,系统,地址,工作,状态,技术,电脑,命令,设备,lin

    linux网络延时命令?

    linux网络延时命令?,网络,时间,检测,地址,电脑,系统,设备,工具,基础,管理,lin

    linux网络联通命令?

    linux网络联通命令?,网络,地址,工作,系统,信息,联通,电脑,命令,检测,管理,Lin

    linux网络驱动器命令?

    linux网络驱动器命令?,网络,系统,电脑,最新,位置,检测,地址,材料,数据,命令,l

    linux网络下载命令?

    linux网络下载命令?,软件,工具,网络,系统,服务,密码,名称,平台,官网,盘中,Lin

    linux网络连通性命令?

    linux网络连通性命令?,网络,系统,情况,地址,环境,资料,工具,端口,服务,检测,L

    linux诊断网络的命令?

    linux诊断网络的命令?,网络,系统,信息,地址,电脑,工具,状态,命令,材料,服务,L

    网络跟踪命令linux?

    网络跟踪命令linux?,网络,地址,工具,系统,时间,数据,下行,信息,设备,基础,lin

    linux维护网络命令?

    linux维护网络命令?,网络,地址,系统,工具,信息,服务,电脑,初级,设备,命令,lin

    linux命令查网络互通?

    linux命令查网络互通?,网络,系统,情况,地址,信息,检测,状态,服务,命令,环境,L