PHP中的测试驱动开发
我是使用PHP的网络开发人员。我在Cdesktop应用程序中使用"测试驱动开发"的经验有限。在那种情况下,我们将nUnit用于单元测试框架。
我想开始在新项目中使用TDD,但我真的不确定从哪里开始。
对于基于PHP的单元测试框架,我们有什么建议?对于TDD概念的新手,有哪些好的资源?
解决方案
回答
我们应该研究PHPUnit,它看起来很像nUnit。
回答
我同时使用了PHPUnit和SimpleTest,并且发现SimpleTest更易于使用。
就TDD而言,从最纯粹的意义上来说我还没有多大运气。我认为这主要是时间/学科方面的问题。
在事实之后添加测试是很有用的,但是我最喜欢做的事情是使用编写SimpleTest测试来测试必须修复的特定错误。这样可以很容易地验证事物是否确实固定并保持固定。
回答
SimpleTest是一个很棒的系统。我大约5个月前开始使用它,从未听说过TDD,SimpleTest易于学习,但功能仍然很强大。至于资源,我目前正在阅读肯特·贝克(Kent Beck)的《 TDD示例》,这很好。
回答
PHPUnit是一个标准,但有时也会令人不知所措,因此,如果我们觉得它太复杂,请查看phpt以开始使用。在其中编写测试非常非常容易。对于任何程序员来说,都是明智之举。
为了回答TDD问题,我不确定在PHP空间中是否使用了widley TDD。我可以看到快速的应用程序开发和TDD有点冲突(严格来说是恕我直言)。 TDD要求我们全面了解所构建的内容,并预先编写测试,然后实施代码以使测试通过。
因此,例如,我们要做的是在完成后编写大量测试。这并不总是最好的方法,因为我们有时最终会通过虚假测试,但并没有真正有用,但至少可以扩展。在内部,我们继续进行测试,并且基本上针对发现的每个错误编写测试。这就是它变得更加牢固的方式。
回答
我个人更喜欢SimpleTest。有一个命令行测试运行程序和基于Web的测试运行程序,甚至还有一个Eclipse插件,可让我们从IDE本身运行单元测试。我发现Zend与PHPUnit的连接更难工作,尤其是在调试器中。
我们内部使用SimpleTest的方式是使用我们自己编写的连续集成脚本。每次我们向SVN签入功能时,我们都会包含单元测试。 CI脚本每隔一个小时左右运行一次,并调用运行我们所有单元测试的命令行PHP脚本。如果有休息,我会收到一封电子邮件。这是减少系统错误的好方法。
但是,我们可以轻松地使用Phing之类的东西在cron作业上或者通过SVN检入挂钩自动运行测试。
实际上,如果我们想直接与我联系以寻求进一步的帮助,则可以通过SO上的个人资料与我联系。我很乐意为我们提供帮助。
回答
我强烈建议肯特·贝克(ISBN-10:0321146530)进行"测试驱动开发"。它不是专门为PHP编写的,但是其中的概念已经存在,应该可以很容易地翻译成PHP。