44

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

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

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

4

8 回答 8

41

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

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

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

于 2008-09-05T16:54:04.623 回答
11

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

于 2008-09-08T21:18:36.410 回答
9

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

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

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

于 2008-09-05T17:24:53.597 回答
4

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

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

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

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

于 2008-09-05T21:56:35.580 回答
2

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

于 2008-09-05T16:55:18.113 回答
1

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

于 2008-09-05T16:53:20.317 回答
1

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

于 2012-02-27T23:54:48.000 回答
0

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

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

于 2018-06-26T20:23:12.833 回答