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

2022-08-30 21:38:52

好吧,我用PHP和JavaScript开发Web应用程序,在Stack Overflow上,我见过单元测试这个词,但是在网站上没有任何地方我能够找到一个令人满意的答案,确切地说是单元测试。

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


答案 1

单元测试适用于要维护的任何代码。

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

当然,它还要求你在编写代码时要有相当的纪律,这既是因为必须能够隔离单个函数或类来测试它们,也因为测试不是自己编写的。你必须这样做。;)

鉴于我见过的大多数PHP代码的质量,我会说单元测试在PHP社区中肯定有它的位置。事实上,比几乎任何其他语言都更是如此。;)


答案 2

单元测试是自动测试,用于测试给定的代码段是否执行了在给定情况下预期它执行的操作。良好的单元测试测试小块功能,通常在单个功能的级别。

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

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

单元测试很有用,原因如下:

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

单元测试对任何大于几行的代码都很有用,无论语言如何。我肯定已经对php代码进行了单元测试,即使对于相对较小的项目也是如此,并且从中获得了直接的回报。