PHP 中的测试驱动开发

Posted

技术标签:

【中文标题】PHP 中的测试驱动开发【英文标题】:Test Driven Development in PHP 【发布时间】:2010-09-07 23:00:15 【问题描述】:

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

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

对于基于 PHP 的单元测试框架,您有什么建议,对于刚接触 TDD 概念的人来说,有哪些好的资源?

【问题讨论】:

【参考方案1】:

你应该看看PHPUnit,它看起来很像nUnit。

【讨论】:

【参考方案2】:

我使用过 PHPUnit 和 SimpleTest,发现 SimpleTest 更易于使用。

就 TDD 而言,从最纯粹的意义上说,我对它的运气并不好。我认为这主要是我的时间/纪律问题。

事后添加测试有点用,但我最喜欢做的事情是使用编写 SimpleTest 测试来测试我必须修复的特定错误。这样可以很容易地验证事情是否确实已修复并保持不变。

【讨论】:

【参考方案3】:

SimpleTest 是一个很棒的系统。我大约 5 个月前开始使用它,从未听说过 TDD,SimpleTest 易于学习但仍然很强大。至于资源,我目前正在阅读 Kent Beck 的TDD By Example,很好。

【讨论】:

【参考方案4】:

PHPUnit 是一个标准,但有时它也很繁琐,所以如果您觉得它太复杂,请查看phpt 以帮助您入门。在其中编写测试非常非常容易。对任何程序员来说都不费吹灰之力。

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

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

【讨论】:

多久以前有人-1这个? 顺便说一句,这是 goog 上“tdd in php”的第二名和“tdd php”的第一名! 我不知道为什么它是-1。不过我坚持我的意见。我的观点是,对于快速原型,我几乎没有 TDD,但我几乎总是(80-90% 的时间)在其他情况下进行 TDD。我也还是喜欢phpt。不知道为什么这是一件坏事。虽然 PHPUnit 有其优势,但它仍然是一个复杂的框架。 Hab keine Ahnung wovon Du sprichst. TDD 的整个理念是关于更快的开发。你不写所有的测试,你写一些东西,然后一旦你需要从 PHP 调用一些东西,你就写那个 PHP,所以它是“可调用的”。然后为该输出编写更多测试,然后编写一些 PHP 来实现该输出。然后重复广告。【参考方案5】:

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

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

但是,您可以轻松地使用 Phing 之类的东西自动运行测试,无论是在 cron 作业上还是使用 SVN 签入挂钩。

事实上,如果您想直接与我联系以获得进一步的帮助,您可以通过我在 SO 上的个人资料信息与我联系。我很乐意帮助你。

【讨论】:

【参考方案6】:

我强烈推荐Test-Driven Development by Kent Beck (ISBN-10: 0321146530)。它不是专门为 PHP 编写的,但其中的概念已经存在并且应该可以很容易地转换为 PHP。

【讨论】:

【参考方案7】:

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

【讨论】:

【参考方案8】:

测试驱动开发是一种始终在代码之前编写测试的方法。 您应该先学习PHPUNIT 才能开始 TDD 开发。然后,在制作函数时,您应该始终考虑函数如何失败并在 phpunit 中编写测试用例,最后您应该编写代码以通过测试。这将是一种新方法,所以一开始它会有点困难,但是一旦你习惯了它,你会发现它对于开发后的错误和编码风格非常有用。你可以通过这个Step By Step 指南来理解这个概念。

永远记住,如果测试是在开发之后编写的,它们是无用的。所以如果你想写单元测试,TDD 是必须的

【讨论】:

以上是关于PHP 中的测试驱动开发的主要内容,如果未能解决你的问题,请参考以下文章

TDD 中的测试台(测试驱动开发)

Swift - 解决测试驱动开发中的构建错误?

Linux USB 驱动开发—— USB 鼠标驱动注解及测试

Android开发—Flutter 中的事件驱动附:Flutter开发环境搭建和测试全套PDF资料

虚拟字符设备驱动开发

前端测试