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_Integration Testing - Fatal编程技术网

Unit testing 什么';单元测试和集成测试之间的区别是什么?

Unit testing 什么';单元测试和集成测试之间的区别是什么?,unit-testing,integration-testing,Unit Testing,Integration Testing,单元测试和集成测试之间有什么区别 这些测试有不同的名称吗?像有些人称单元测试为功能测试等?单元测试测试您完全可以控制的代码,而集成测试测试您的代码如何使用或与其他代码“集成” 因此,您可以编写单元测试以确保自己的库按预期工作,然后编写集成测试以确保您的代码与正在使用的其他代码(例如库)配合良好 功能测试与集成测试相关,但更具体地说是指测试整个系统或应用程序的测试,所有代码一起运行,几乎是超级集成测试。单元测试是在(尽可能)完全隔离的情况下完成的 集成测试是在被测对象或模块与其他代码位正常工作时进

单元测试和集成测试之间有什么区别


这些测试有不同的名称吗?像有些人称单元测试为功能测试等?

单元测试测试您完全可以控制的代码,而集成测试测试您的代码如何使用或与其他代码“集成”

因此,您可以编写单元测试以确保自己的库按预期工作,然后编写集成测试以确保您的代码与正在使用的其他代码(例如库)配合良好

功能测试与集成测试相关,但更具体地说是指测试整个系统或应用程序的测试,所有代码一起运行,几乎是超级集成测试。

单元测试是在(尽可能)完全隔离的情况下完成的


集成测试是在被测对象或模块与其他代码位正常工作时进行的。

单元测试是由程序员编写的一种测试,用于验证相对较小的代码段是否正在执行其预期的操作。它们的范围很窄,应该易于编写和执行,它们的有效性取决于程序员认为有用的东西。这些测试是供程序员使用的,它们对其他任何人都没有直接的用处,但是,如果它们完成了自己的工作,测试人员和下游用户应该会从较少的bug中获益

作为单元测试的一部分,意味着被测试代码之外的东西会被模仿或删除。单元测试不应该依赖于外部系统。它们测试内部一致性,而不是证明它们与某些外部系统配合得很好

进行集成测试,以证明系统的不同部分协同工作。集成测试可以覆盖整个应用程序,并且它们需要更多的努力才能组合起来。它们通常需要为它们分配数据库实例和硬件等资源。集成测试在演示系统工作(尤其是对非程序员)方面比一组单元测试更令人信服,至少在集成测试环境类似于生产的程度上是如此


实际上,“集成测试”被用于各种各样的事情,从针对类似于生产环境的完整系统测试到使用未模拟的资源(如数据库或队列)的任何测试。在低端,集成测试可以是junit测试,其中存储库针对内存中的数据库执行,而在高端,集成测试可以是验证应用程序是否可以交换消息的系统测试。

单元测试通常针对软件模块中实现的单个功能进行。测试范围完全在此软件模块内。单元测试永远不能满足最终的功能需求。它属于白盒测试方法


而集成测试是为了确保不同的软件模块实现。测试通常在软件开发中完成模块级集成后进行。。该测试将涵盖功能需求,但不足以确保系统验证

单元测试不应该依赖于被测试单元之外的代码。您可以通过寻找最小的可测试部件来决定单元是什么。如果存在依赖项,则应将它们替换为假对象。嘲弄、存根。。测试执行线程在最小的可测试单元内开始和结束


当虚假对象被真实对象替换,并且测试执行线程交叉进入其他可测试单元时,您有一个集成测试

同样值得一提的是,单元测试通常指测试最少代码量的测试,例如,单个功能单元测试的描述非常好,但您是否考虑过成对集成不包括整个应用程序—只有两个可测试单元,系统测试也包括整个应用程序。区别不在于测试代码的大小。这个定义也忽略了一个实际方面:单元测试应该只依赖于被测试的实现单元;它们不应依赖于外部组件,如数据库、网络服务、web浏览器交互。当需要这样的外部元素时,单元测试使用模拟对象。我花了很长时间才理解这一点,因为当你说unit时,我曾经认为一个“小代码块”的例子是getCitiesFromCountry(字符串国家),如果你通过“UK”,应该验证数据库是否返回“London,Manchester”。那对我来说是一个单位。因此,我将使用一个模拟来模拟数据库,并尝试返回一个过滤列表。我现在了解到,这是一项集成测试,如果数据库在被要求访问英国城市时返回纽约,QAs将接受这项测试。单元测试只是测试往返过程(例如到控制器的往返过程)是否被调用并按其应有的方式运行。@PauloMerson这是一个非常好的观点,谢谢。测试代码的大小不定义单元。事实上,高级开发人员告诉我,他们在单元测试中会容忍外部数据库连接,这证明这个主题非常令人困惑。我要补充的是,目前(在我写这篇文章的时候是2018年年中)集成测试的执行成本比以前低得多。这主要是由于集装箱化的持续发展。如果您需要一个数据库、redis、SFTP等,它们实际上就是一个“docker-pull”,docker-compose使您可以很容易地在一个“docker-compose-up”中启动应用程序及其依赖项command.Thank@Dave但是为什么单元测试没有外部依赖关系?@BKSpurgeon因为在单元测试中,您只想在定义良好的上下文中检查被测试函数的行为。它不应该受到depende中潜在bug的影响