【发布时间】:2010-09-25 16:29:30
【问题描述】:
好的,我用 PHP 和 JavaScript 开发 Web 应用程序,在 Stack Overflow 上我经常看到 unit test 这个词经过,但我在网站上找不到任何地方对单元测试到底是什么的一个令人满意的答案。
那么什么是单元测试,作为 PHP 和 JavaScript 程序员,我应该关心还是只针对“真正的”编程语言?
【问题讨论】:
标签: php javascript unit-testing
好的,我用 PHP 和 JavaScript 开发 Web 应用程序,在 Stack Overflow 上我经常看到 unit test 这个词经过,但我在网站上找不到任何地方对单元测试到底是什么的一个令人满意的答案。
那么什么是单元测试,作为 PHP 和 JavaScript 程序员,我应该关心还是只针对“真正的”编程语言?
【问题讨论】:
标签: php javascript unit-testing
关于为什么首先应该进行单元测试,我想补充一下Barry Boehm的论点:“在单元测试阶段发现并纠正的错误超过一百次比在交付给客户后完成更便宜。”
虽然乘数听起来有点粗糙,但我认为这个论点绝对证明了测试的合理性。
【讨论】:
除了已经回答的问题,测试用例涵盖您的代码允许您继续 Refactoring(改进您的代码设计而不修改其可观察行为)。
Unit test frameworks for PHP 包括 PHPUnit 和 SimpleTest,它们已经是 compared on StackOverflow。
【讨论】:
如果您编写任何描述的应用程序,您应该考虑单元测试。如果做得好,它们会迫使您考虑交付给用户的代码质量。我认为您在这里遇到的问题是单元测试代码和自动化单元测试之间的区别。单元测试可以像编写一组测试然后手动运行一样简单地完成。
另一方面,自动化单元测试依赖于您拥有某种形式的应用程序/工具来运行和重新运行测试。使用自动化单元测试,您只需按一个按钮即可重新运行测试。那么为什么重新运行测试如此重要呢?简单地说,您不会编写应用程序在它们上运行一次测试然后离开它们。编写您的测试,以便您在离散的小运行中练习您的代码,并在整个开发过程中运行它们。通过这样做,通过一组编写良好的测试,您更有可能识别出因升级而损坏的代码。
【讨论】:
单元测试是一种自动化测试,用于测试给定的代码在给定的一组环境下是否按照您的预期执行。好的单元测试测试小块功能,通常是在单个功能级别。
单元测试的结构通常是这样的,您可以设置一些状态,运行要测试的函数或方法,然后断言该函数的输出,或者该函数导致其他状态的变化。大多数单元测试框架都有支持和构建它的实用程序,例如:
单元测试之所以有用的原因有很多:
单元测试适用于任何大于几行的代码,无论是哪种语言。我确实对 php 代码进行了单元测试,即使是对于相对较小的项目,并且从中获得了立竿见影的回报。
【讨论】:
google search for "php unit testing" 提供了有关此主题的大量信息。 PHPUnit 项目看起来很有趣。
【讨论】:
单元测试适用于您希望维护的任何代码。
简而言之,这个想法是编写许多小测试,每个小测试都可以单独运行,并测试代码库中尽可能小的部分(通常是单个类或单个函数)。如果我给这个函数它期望的输入,它会返回我期望的输出吗?如果是这样,这意味着应用程序的其余部分几乎可以假设它可以工作。如果没有,我宁愿在一个小的、简单的、独立的单元测试函数中捕获错误,而不是尝试在整个应用程序中跟踪它。
当然,它还要求您在编写代码时相当自律,这既是因为必须可以隔离单个函数或类来测试它们,而且因为测试不会自己编写.你必须这样做。 ;)
鉴于我见过的大多数 PHP 代码的质量,我会说单元测试肯定在 PHP 社区中占有一席之地。事实上,这比几乎任何其他语言都要多。 ;)
【讨论】:
单元测试是对您编写的一小部分代码的测试。您将其与系统的其余部分隔离开来进行测试,以确保您的代码的那部分工作正常。
测试大量小部分代码,确保它们工作,然后测试它们一起工作,而不是测试整个系统更容易。
区分单元测试和自动化单元测试很重要。您应该始终对代码进行单元测试。但是,自动化单元测试是另一回事。
【讨论】:
我见过的大多数 php 几乎不可能进行单元测试。
Wikipedia 有一篇关于单元测试的文章,如果你有兴趣的话。
【讨论】: