【问题标题】:What is the difference between unit tests and normal tests?单元测试和普通测试有什么区别?
【发布时间】:2012-03-05 14:46:15
【问题描述】:

我正在学习 Drupal,遇到了测试部分。我不明白我们为什么要进行测试。我已经阅读了一些类似What are unit tests and why should I care? 的链接。我知道这样的测试是为了确保我们得到我们想要得到的东西。我的问题是,当我们编写代码时,我们已经对代码进行了测试,以确保它能够正确解析,不会产生错误消息,也能产生正确的结果。我们可以用肉眼看到正确的结果,我们可以尝试一些输入来确保测试极端数据。那么这些(正常)测试和单元测试有什么区别呢?


让我重新表述我的问题。我知道进行单元测试很重要,因为它使程序可靠等。我不明白的是,当我们运行程序时,我们已经确保它产生了我们期望的结果。那么单元测试带来了哪些改进呢?测试已经正确的事情?
我知道我错过了一些东西。但我无法弄清楚我错过了什么。

【问题讨论】:

    标签: php drupal testing


    【解决方案1】:

    计算机程序是非常复杂的系统。代码(通常)对上下文非常敏感:因此,如果在不同的上下文中执行特定的代码位,它的行为可能会非常不同。换句话说,here 的更改可能会对 there 产生意想不到的后果。

    单元测试旨在尽可能彻底地测试一小段逻辑上自包含的代码。使用它们有两个明显的优势:

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

    【讨论】:

    • 但是我做的普通测试和单元测试有什么区别呢?例如,当我多年前学习编程时,有人告诉我尝试一些输入来测试意外结果,即。在计算程序中除以零。这些测试不再有用了吗?
    【解决方案2】:

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

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

    这是一个你没有看到很多有经验的开发人员问的问题,因为我们直觉地害怕未经测试的软件很可能会导致庞大而脆弱的系统。

    【讨论】:

      【解决方案3】:

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

      另见http://en.wikipedia.org/wiki/Regression_testing

      【讨论】:

        【解决方案4】:

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

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

        快速示例:如果您使用函数重命名上传并且数据库查询失败,您可以将其追溯到文件名问题,遗憾的是注意到它是函数。如果你有单元测试,你会被告知重命名函数的输出是错误的。就是这样。

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

        这更像是“彻底测试任何东西”的概念。

        【讨论】:

          猜你喜欢
          • 2011-02-14
          • 2011-07-18
          • 2011-06-21
          • 1970-01-01
          • 1970-01-01
          • 2014-01-30
          • 2011-07-15
          • 1970-01-01
          相关资源
          最近更新 更多