单元测试和正常测试有什么区别?

时间:2012-03-05 14:46:15

标签: php drupal testing

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


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

4 个答案:

答案 0 :(得分:0)

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

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

  • 它们可以帮助您打破有关您正在编写的代码的上下文的假设,这有助于您编写更强大的代码。您编写单元测试,尝试使用不同的上下文(环境变量等)运行代码
  • 他们会帮助您在稍后找出代码是否仍然按照您的预期执行,当您在其他地方进行了重大更改时。

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

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

这意味着单元测试仅测试一个小单元,当单元测试失败时,您完全知道出了什么问题。

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

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

它更像是" Thorougly测试任何和所有内容的概念"