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

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

问题描述:

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


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

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

单元测试被设计为尽可能彻底地测试的代码中的小,在逻辑上自包含块。使用它们有两个明显的优势:

  • 它们帮助您打破关于您正在编写的代码的上下文的假设,从而帮助您编写更健壮的代码。你编写单元测试,尝试运行不同上下文的代码(环境变量等)
  • 他们可以帮助你计算出后面的代码是否仍然按照你的预期执行,当你在其他地方做了实质性的改变。
+0

但是我的正常测试和单元测试之间有什么区别?例如,当我在多年前接受过编程教育时,我被告知尝试一些输入来测试意想不到的结果,即。在计算程序中除以零。这些测试不再有用吗? – Standstill 2012-03-05 15:04:58

完美的重复和对细节的细致关注对于人类来说是非常糟糕的任务。您不会执行两次相同的测试,少了100次,所以您永远不会对自动化套件产生稳定系统的信心。

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

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

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

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

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

这意味着单元测试测试只是一个小单位,并在单元测试失败,你知道到底是什么地方出了错。

简单的例子:如果你使用一个函数来重命名上传和数据库查询失败,你可以跟踪它回到是与文件名的问题,唉注意到它的功能。如果你有单元测试,你会被告知之前重命名函数的输出是错误的。这是主意。

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

这更像是“Thorougly测试任何和所有东西”的概念。