Php 单元测试和普通测试之间有什么区别?

Php 单元测试和普通测试之间有什么区别?,php,drupal,testing,Php,Drupal,Testing,我正在学习Drupal,遇到了测试部分。我不明白的是我们为什么要做测试。我已经读了一些像这样的链接。我理解这样的测试是为了确保我们得到我们想要的。我的问题是,当我们编写代码时,我们已经测试了代码,以确保它正确解析,而不是生成错误消息,也生成正确的结果。我们可以用眼睛看到正确的结果,我们可以尝试一些输入,以确保测试极端数据。那么这些(正常)测试和单元测试之间有什么区别呢 让我重新措辞我的问题。我知道进行单元测试很重要,因为它使程序变得可靠等等。。我不明白的是,当我们运行一个程序时,我们已经确保它产

我正在学习Drupal,遇到了测试部分。我不明白的是我们为什么要做测试。我已经读了一些像这样的链接。我理解这样的测试是为了确保我们得到我们想要的。我的问题是,当我们编写代码时,我们已经测试了代码,以确保它正确解析,而不是生成错误消息,也生成正确的结果。我们可以用眼睛看到正确的结果,我们可以尝试一些输入,以确保测试极端数据。那么这些(正常)测试和单元测试之间有什么区别呢 让我重新措辞我的问题。我知道进行单元测试很重要,因为它使程序变得可靠等等。。我不明白的是,当我们运行一个程序时,我们已经确保它产生我们期望的结果。那么单元测试带来了什么改进呢?测试已经正确的东西

我知道我错过了什么。但是我不知道我遗漏了什么。

计算机程序是非常复杂的系统。代码(通常)对上下文非常敏感:因此,如果在不同的上下文中执行特定的代码位,其行为可能会非常不同。换句话说,这里的变化可能会带来意想不到的后果

单元测试旨在尽可能彻底地测试逻辑上独立的小代码块。使用它们有两个明显的优点:

  • 它们帮助您打破对正在编写的代码上下文的假设,从而帮助您编写更健壮的代码。您可以编写单元测试,尝试使用不同的上下文(环境变量等)运行代码
  • 当您在其他地方做了实质性的更改时,它们可以帮助您确定代码是否仍按预期执行

    • 计算机程序是非常复杂的系统。代码(通常)对上下文非常敏感:因此,如果在不同的上下文中执行特定的代码位,其行为可能会非常不同。换句话说,这里的变化可能会带来意想不到的后果

      单元测试旨在尽可能彻底地测试逻辑上独立的小代码块。使用它们有两个明显的优点:

      • 它们帮助您打破对正在编写的代码上下文的假设,从而帮助您编写更健壮的代码。您可以编写单元测试,尝试使用不同的上下文(环境变量等)运行代码
      • 当您在其他地方做了实质性的更改时,它们可以帮助您确定代码是否仍按预期执行

      完美的重复和对细节的一丝不苟的关注对于人类来说是出了名的糟糕任务。您不会执行两次相同的测试,更不用说100次了,因此您永远无法像自动化套件那样对稳定的系统产生信心

      即使这些巨大的好处还不够,它也会让你成为一个更好的开发者。独立测试软件的各个部分将提高您的技能,并引导您进行优化和改进,否则您很可能会忽略这些优化和改进


      这是很多有经验的开发人员都不会问的问题,因为我们直觉上害怕庞大而脆弱的系统,而这些系统很可能是未经测试的软件的结果。

      完美的重复和对细节的细致关注对于人类来说是出了名的糟糕任务。您不会执行两次相同的测试,更不用说100次了,因此您永远无法像自动化套件那样对稳定的系统产生信心

      即使这些巨大的好处还不够,它也会让你成为一个更好的开发者。独立测试软件的各个部分将提高您的技能,并引导您进行优化和改进,否则您很可能会忽略这些优化和改进


      这是一个很多有经验的开发人员都不会问的问题,因为我们直觉上害怕庞大而脆弱的系统,而这些系统很可能是未经测试的软件的结果。

      当您重构代码时,您不必手动测试每个代码路径。这节省了大量的时间


      另请参见。

      重构代码时,不必手动测试每个代码路径。这节省了大量的时间

      另请参见。

      “单元测试”是测试,与正常测试相同。但它们是一个子集

      这意味着单元测试只测试一个小单元,当单元测试失败时,您确切地知道出了什么问题

      快速示例:如果您使用一个函数重命名上载,而数据库查询失败,那么您可以将其追溯到文件名有问题,很遗憾,注意到这是函数。如果您进行了单元测试,则会在前面通知您重命名函数的输出错误。这就是我的想法

      这个例子很简单,但当您处理大量函数时,一些产生错误输出的函数可能会在成功执行20个其他函数后出现反射。然后你必须调试其中的每一个以发现发生了什么。TDD的存在是为了减少这些风险

      它更像是一个“彻底测试任何东西”的概念。“单元测试”是测试,与普通测试相同。但它们是一个子集

      这意味着单元测试只测试一个小单元,当单元测试失败时,您确切地知道出了什么问题

      快速示例:如果您使用一个函数重命名上载,而数据库查询失败,那么您可以将其追溯到文件名有问题,很遗憾,注意到这是函数。如果您进行了单元测试,则会在前面通知您重命名函数的输出错误。这就是我的想法

      这个例子很简单,但是当您处理大量函数时,一些产生错误输出的函数可能会在成功执行20个其他函数后出现反射