Php 什么是单元测试?我为什么要关心?

Php 什么是单元测试?我为什么要关心?,php,javascript,unit-testing,Php,Javascript,Unit Testing,好的,我用PHP和JavaScript开发web应用程序,很多时候在堆栈溢出上我都看到过单元测试这个词,但是在网站上我没有找到一个令人满意的答案来解释单元测试到底是什么 那么什么是单元测试呢?作为一名PHP和JavaScript程序员,我应该关心还是只关心“真正的”编程语言呢?我见过的大多数PHP几乎不可能在上面进行单元测试 如果你感兴趣的话,有一篇关于单元测试的文章 单元测试是对您编写的代码的一小部分的测试。您可以将其与系统的其余部分隔离测试,以确保该部分代码正常工作 测试代码的许多小部分,确

好的,我用PHP和JavaScript开发web应用程序,很多时候在堆栈溢出上我都看到过单元测试这个词,但是在网站上我没有找到一个令人满意的答案来解释单元测试到底是什么


那么什么是单元测试呢?作为一名PHP和JavaScript程序员,我应该关心还是只关心“真正的”编程语言呢?

我见过的大多数PHP几乎不可能在上面进行单元测试


如果你感兴趣的话,有一篇关于单元测试的文章

单元测试是对您编写的代码的一小部分的测试。您可以将其与系统的其余部分隔离测试,以确保该部分代码正常工作

测试代码的许多小部分,确保它们工作,然后一起测试它们,比测试整个系统更容易


区分单元测试和自动化单元测试是很重要的。您应该始终对代码进行单元测试。然而,自动化单元测试是一个完全不同的主题。

单元测试适用于您希望维护的任何代码

简而言之,我们的想法是编写许多小测试,每个测试都可以独立运行,并测试代码库中可能最小的部分(通常是单个类或单个函数)。如果我给这个函数期望的输入,它会返回我期望的输出吗?如果是这样的话,这意味着应用程序的其余部分几乎可以假设它可以工作。如果没有,我宁愿在一个小的、简单的、孤立的单元测试函数中捕获错误,而不是试图在整个应用程序中跟踪它

当然,它还要求您在编写代码时严格遵守规则,因为必须能够隔离单个函数或类来测试它们,而且测试本身并不编写。你必须这样做


考虑到我所看到的大多数PHP代码的质量,我认为单元测试在PHP社区中肯定占有一席之地。事实上,这一点几乎比任何其他语言都重要

A产生了关于这个主题的信息宝库。这个项目看起来很有趣。

单元测试是一种自动化测试,它测试给定的代码段在给定的一组环境下是否执行了您期望的操作。好的单元测试通常在单个函数的级别测试小的功能

单元测试的结构通常是这样的:设置一些状态,运行要测试的函数或方法,然后断言该函数的输出,或者断言该函数导致的其他状态的更改。大多数单元测试框架都有用于支持和构建此功能的实用程序,例如:

  • 测试用例:将类似测试分组在一起的方法,通常用于测试同一文件或代码段
  • 设置/拆卸函数:在每次测试之前调用的函数,其设置和清理状态在多个测试中相同
  • 断言函数:允许您断言特定事物为真的函数,例如值等于另一个预期值、值为真/假等。当它们失败时,它们会向您显示预期值和实际值
  • 运行测试的应用程序:一个为您一个接一个地运行所有测试的应用程序,向您显示每个测试是成功还是失败,如果失败,哪些特定断言失败,以及实际值与预期值的对比
单元测试很有用,原因有很多:

  • 它们确保您的代码在编写时能够正常工作,而无需手动测试。在编写函数时,您可以测试关于函数如何工作的假设,并立即捕获bug
  • 即使在您或其他人更改代码时,它们仍能使代码正常工作。一旦编写了一个函数并进行了完整的单元测试(即,它应该做的所有事情都有相关的单元测试来验证它们是否真的做到了),那么如果您或任何其他人破坏了任何功能,您将在运行单元测试时立即知道,并且可以轻松地纠正它
  • 它们帮助您调试。在试图诊断手动测试应用程序时发现的错误时,不必查看大量代码,单元测试允许您将重点放在较小的功能上,从而减少需要考虑的复杂性
  • 他们以一种随着代码更改而不断更新的方式记录您的代码。设计文档和注释很容易忘记更新。另一方面,单元测试在未更新时会中断。如果写得很清楚,它们将显示代码在特定情况下的实际功能,并可以向您证明这一点

单元测试对于任何大于几行的代码都是有用的,无论语言如何。我已经明确地对PHP代码进行了单元测试,即使对于比较小的项目,也得到了即时的奖励。

< P>如果你编写了任何描述的应用程序,你就应该考虑单元测试。如果操作得当,它们会迫使您考虑交付给用户的代码的质量。我认为这里的问题是单元测试代码和自动单元测试之间的区别。单元测试可以简单地写下一组测试,然后手动运行它们

另一方面,自动化单元测试依赖于您拥有某种形式的应用程序/工具来运行和重新运行测试。使用自动单元测试,您只需按一个按钮即可重新运行测试。那么,为什么重新运行测试如此重要呢?简单地说,您不会编写应用程序,在它们上运行测试一次,然后就离开它们。编写测试,这样您就可以在不连续的小运行中运行代码,并在