Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing 单元测试如何比仅仅作为一个整体测试应用程序的整个输出更好?_Unit Testing_Testing - Fatal编程技术网

Unit testing 单元测试如何比仅仅作为一个整体测试应用程序的整个输出更好?

Unit testing 单元测试如何比仅仅作为一个整体测试应用程序的整个输出更好?,unit-testing,testing,Unit Testing,Testing,我不明白单元测试有什么好处。 测试人员将整个输出作为一个整体进行测试,而不是进行单元测试,这还不够吗 谢谢。仍然需要执行一定级别的手动测试,但单元测试用于减少进入该阶段的缺陷数量。单元测试测试系统的最小部分,如果它们都能正常工作,那么整个应用程序正常工作的机会就会显著增加 它还可以帮助添加新功能,因为回归测试可以快速、自动地执行。这是一个很难解决的问题,因为它涉及的问题非常广泛。然而,以下是我的简短回答: 测试驱动开发(或TDD)旨在证明应用程序的每个逻辑单元(或代码块)的功能完全符合它的要求。

我不明白单元测试有什么好处。 测试人员将整个输出作为一个整体进行测试,而不是进行单元测试,这还不够吗


谢谢。

仍然需要执行一定级别的手动测试,但单元测试用于减少进入该阶段的缺陷数量。单元测试测试系统的最小部分,如果它们都能正常工作,那么整个应用程序正常工作的机会就会显著增加


它还可以帮助添加新功能,因为回归测试可以快速、自动地执行。

这是一个很难解决的问题,因为它涉及的问题非常广泛。然而,以下是我的简短回答:

测试驱动开发(或TDD)旨在证明应用程序的每个逻辑单元(或代码块)的功能完全符合它的要求。为了提高效率,尽可能使测试自动化,这怎么可能真的有害呢

通过测试每一段逻辑代码,您可以在某种层次上信任代码的使用。假设我构建了一个依赖于线程安全堆栈实现的应用程序。在我构建堆栈之前,是否应该保证堆栈在每个阶段都能正常工作


关键是,如果整个应用程序中的某个东西坏了,这意味着只看总输出/结果,您如何知道它来自哪里?当然是调试了!这让你回到了起点。TDD允许您——希望如此——绕过开发中最痛苦的阶段

越早发现bug,修复它们的成本就越低。程序员在单元测试期间发现的bug非常便宜(只需修复该死的东西)

在系统或集成测试期间发现的bug成本更高,因为您必须修复它并重新启动测试周期

客户发现的bug会花费很多:重新编码、重新测试、重新打包等等。当您通知管理层您在单元测试期间没有发现它,因为您没有做任何操作,认为系统测试人员会发现所有问题时,它也可能会在您的derriere上留下痛苦的启动痕迹:-)

因为催化转化器不能正常工作,通用汽车召回10000辆汽车要花多少钱

现在想一想,如果他们发现在这些转换器交付给他们之后,但在它们被投入10000辆汽车之前,会花费多少钱

我想你会发现后一种选择比较便宜

这就是为什么测试驱动开发和持续集成(有时)是件好事的原因之一——测试一直都在进行


此外,单元测试不检查程序是否作为一个整体工作,只检查每一个小部分是否按预期执行。这通常比更高级别的测试要多得多。

对于足够复杂的应用程序,作为一个整体测试整个输出可能无法涵盖足够多的不同可能性。例如,任何给定的应用程序都有大量不同的代码路径,可以根据输入来遵循这些路径。在典型的测试中,您的代码中可能有许多部分是从未遇到过的,因为它们只在某些情况下使用,所以您无法确定在您的测试环境中没有运行的任何代码是否能够正常工作。此外,一段代码中的错误在大多数情况下可能会被另一段代码中的其他错误所掩盖,因此您可能永远不会发现某些错误


最好分别测试每个函数或类。这样,测试更容易编写,因为您只测试代码的一小部分。测试时,覆盖所有可能的代码路径也更容易,如果单独测试每个小部分,则即使在应用程序中运行时,这些错误通常会被代码的其他部分掩盖,也可以检测到错误。

测试人员通常测试端到端功能。显然,这是为用户场景而设计的,具有难以置信的价值

单元测试提供不同的功能。这些是开发人员在没有其他功能或与其他功能组合的情况下验证他们编写的组件是否正确工作的方法。这提供了一系列价值,包括

  • 提供不可忽略的文档
  • 将bug隔离到特定组件的能力
  • 验证代码中的不变量
  • 为代码库中的更改提供快速、即时的反馈

您所描述的是集成测试。集成测试不会告诉您的是,当您的输出不再正确时,您的大型应用程序的哪一部分工作不正常

单元测试的优点是,您可以为需要程序执行的每个业务假设或算法步骤编写测试。当有人向您的应用程序添加或更改代码时,您可以立即准确地知道引入错误时哪一步、哪一部分,甚至哪一行代码被破坏。仅出于这一原因,在维护上节省的时间就值得一试,但更大的优势在于,回归错误无法引入(假设您的测试在构建软件时自动运行)。如果您修复了一个bug,然后编写了一个测试专门用于在将来捕获该bug,那么就不可能有人会意外地再次引入它


集成测试和单元测试的结合可以让你晚上睡得更轻松,特别是当你那天签入一大块代码时。

帮你自己一个忙,先试试单元测试。在我意识到单元测试是多么的有用/强大之前,我自己也是个怀疑论者。如果你仔细想想,他们并不是真的要增加你的工作量。他们在那里为你提供