unit testing与functiontesting

unit testing和functiontesting有什么区别? unit testing也可以testing一个函数吗?

unit testing – testing一个单独的单元,比如一个类中的方法(函数),所有依赖都被模拟出来。

functiontesting – AKA集成testing,testing系统中的一部分function。 这将testing许多方法,并可能与数据库或Web服务等依赖项交互。

unit testing告诉开发者,代码是正确的; functiontesting告诉开发人员,代码正在做正确的事情

你可以阅读更多的unit testing与functiontesting


一个很好的解释unit testing和functiontesting的现实生活的类比可以描述如下,

很多时候,一个系统的发展就像build造房屋一样。 虽然这个比喻不是很正确,但为了理解单元和functiontesting之间的区别,我们可以扩展它。

unit testing类似于访问房屋build筑工地的build筑检查员。 他专注于房屋的各种内部系统,基础,框架,电气,pipe道等等。 他确保(testing)房屋的各个部分能够正确安全地工作,即符合build筑规范。

在这种情况下functiontesting类似于房主访问这个相同的施工现场。 他认为内部系统的行为是恰当的,build筑检查员正在执行他的任务。 房主专注于住在这个房子里会是什么样子。 他关心的是房子的外观,各个房间的尺寸是否舒适,房子是否符合家庭的需要,是能够赶上早晨阳光的好地方。

房主正在对房子进行functiontesting。 他有用户的观点。

build筑检查员正在对房屋进行unit testing。 他有build设者的视angular。


总而言之,

unit testing是从程序员的angular度写的。 它们是为了确保某个类的特定方法(或单元 )执行一组特定的任务。

functiontesting是从用户的angular度编写 。 他们确保系统在用户期望的情况下运行。

  • unit testingtesting一个独立的行为单元 。 什么是行为单位? 这是系统中可以独立进行unit testing的最小部分。 (这个定义实际上是循环的,IOW实际上并不是一个定义,但是在实践中它似乎工作得很好,因为你可以直观地理解它。)

  • functiontestingtesting一个独立的function。


  • 一个单位的行为是非常小的:虽然我绝对不喜欢这种愚蠢的“每种方法一个unit testing”的口头禅,从大小的angular度来看,这是正确的。 行为单位是方法的一部分,也可能是一些方法之间的某种东西。 最多只有一个对象,但不能超过一个。

  • 一个function块通常包含许多方法,并且跨几个对象,通常通过多个架构层。


  • 一个unit testing可能是这样的:当我调用validate_country_code()函数并将国家代码'ZZ'传递给它时,它应该返回false

  • functiontesting将是:当我填写国家代码为ZZ的运输表格时,我应该被redirect到帮助页面,该页面允许我从菜单中select我的国家代码。


  • unit testing是由开发人员从开发人员的angular度为开发人员编写的。

  • functiontesting可能是面向用户的,在这种情况下,从用户的angular度来看,它们是由开发人员和用户(或者用正确的工具和正确的用户,甚至用户本身)编写的。 或者他们可能是开发人员面对的(例如,当他们描述用户不关心的某些内部function时),在这种情况下,开发人员可以为开发人员编写这些function,但仍然从用户的angular度来看。


  • 在前一种情况下,functiontesting也可以作为验收testing,作为function需求或function说明的可执行编码,在后一种情况下,也可以作为集成testing。

  • unit testing经常变化,functiontesting不应该在主版本中改变。


TLDR:

为了回答这个问题:unit testingfunctiontesting的一个子types


有两大组: function非functiontesting。 我发现的最好的(非详尽的)插图是这个(来源: http://www.inflectra.com ):

在这里输入图像描述

(1)unit testing:testing一小段代码(函数/方法)。 它可能被认为是(白盒)functiontesting。

将函数放在一起时,可以创build一个模块=独立的块,可能具有可以testing的用户界面(模块testing)。 一旦你有至less两个单独的模块,然后你粘在一起,然后:

(2)集成testing:当你把两个或多个(子)模块或(子)系统放在一起时,看它们是否一起玩。

然后,按照您或您的团队认为合适的顺序,将第三个模块,第四个和第五个模块整合在一起,一旦所有的拼图碎片放在一起,

(3)系统testing:testingSW作为一个整体。 这几乎是“ 所有碎片集成testing”。

如果没关系,那就来

(4)验收testing:我们是否真正build立了客户要求的? 当然,验收testing应该在整个生命周期内完成 ,而不仅仅是在最后阶段,在这个阶段你意识到客户需要一辆跑车,而你build造了一辆面包车。

在这里输入图像描述

“functiontesting”并不意味着您正在testing代码中的函数(方法)。 这通常意味着您正在testing系统function – 当我在命令行运行foo file.txt时, foo file.txt中的行可能会被颠倒过来。 相比之下,单个unit testing通常涵盖单个方法的一个情况 – length("hello")应该返回5,而length("hi")应该返回2。

另请参阅IBM在unit testing和functiontesting之间的界限 。

在Rails中,单元文件夹是为了保存你的模型的testing,function文件夹是为了保存你的控制器的testing,而集成文件夹是为了保存涉及任何数量的控制器交互的testing。 夹具是组织testing数据的一种方式; 他们驻留在夹具文件夹中。 test_helper.rb文件保存您的testing的默认configuration。 你可以访问这个 。

根据ISTQB,这两者不具可比性。 functiontesting不是集成testing。

unit testing是testing级别之一,functiontesting是testingtypes。

基本上:

系统(或组件)的function是“它做什么”。 这通常在需求规范,function规范或用例中进行描述。

组件testing(也称为单元,模块和程序testing)search可单独testing的软件(例如模块,程序,对象,类别等)的缺陷并validation其function。

根据ISTQB组件/unit testing可以是function性或非function性的:

组件testing可能包括testingfunction和特定的非function特性,如资源行为(如内存泄漏),性能或健壮性testing,以及结构testing(如决策覆盖)。

软件testing基础 – ISTQBauthentication

我认为它的方式是这样的:一个unit testing确定代码做你想要的代码(例如你想添加参数a和b,你实际上添加它们,而不是减去它们),functiontestingtesting所有的代码一起工作得到一个正确的结果,所以你打算代码做的事实上在系统中得到正确的结果。

但是,基本的区别是functiontesting从用户的angular度从外部testing应用程序。 从程序员的angular度来看,unit testing从内部testing应用程序。 functiontesting应该可以帮助您构build具有正确function的应用程序,并保证您永远不会意外打破它。 unit testing应该可以帮助你编写干净无缺陷的代码。

来自Harry Percival的“Python TDD”一书

unit testing

unit testing包括testing通常是函数或方法的最小代码单元。 unit testing大多由单元/方法/函数的开发者完成,因为他们理解函数的核心。 开发人员的主要目标是通过unit testing来覆盖代码。

它有一个局限性,就是某些函数不能通过unit testing来testing。 即使在所有的unit testing成功完成之后, 不保证产品的正确操作。 系统的一些部分可以使用相同的function,而unit testing只能用于一个用途。

functiontesting

这是一种黑盒testing,其中testing将在产品的function方面进行testing,而无需查看代码。 functiontesting主要由专门的软件testing人员完成。 它将包括使用非标准化数据的积极,消极和BVA技术来testing产品的特定function。 functiontesting比unit testing改进了testing覆盖率。 它使用应用程序GUI进行testing,因此更容易确定界面的特定部分是由什么负责的,而不是确定代码是由哪个function负责的。

unit testing : – unit testing特别用于在产品开发期间按产品组件专门testing产品组件。 Junit和Nunittypes的工具也将帮助您按照unit testing产品。 **而不是在整合之后解决问题,在开发初期解决问题总是很舒服。

functiontesting: – 就testing而言,有两种主要types的testing:1.functiontesting2.非functiontesting。

非function性testing是一种testing,testing人员将testing该产品将执行所有那些客户没有提到的质量属性,但这些质量属性应该在那里。 例如: – 性能,可用性,安全性,负载,压力等,但是在functiontesting中 : – 客户已经满足他的要求,并且有适当的文档logging。testing人员的任务是交叉检查应用function是否按照到build议的系统与否。 为此,testing人员应该使用build议的系统来testing已实现的function。

AFAIK,unit testing不是functiontesting。 让我用一个小例子来解释。 你想testing一个电子邮件networking应用程序的loginfunction是否正常工作,就像用户一样。 为此,你的functiontesting应该是这样的。

 1- existing email, wrong password -> login page should show error "wrong password"! 2- non-existing email, any password -> login page should show error "no such email". 3- existing email, right password -> user should be taken to his inbox page. 4- no @symbol in email, right password -> login page should say "errors in form, please fix them!" 

我们的functiontesting应该检查我们是否可以用无效inputlogin? 例如。 电子邮件没有@符号,用户名有多个点(只允许一个点),.com出现在@等? 一般来说,不! 这种testing进入你的unit testing。

您可以检查unit testing中是否拒绝了无效input,如下面的testing所示。

 class LoginInputsValidator method validate_inputs_values(email, password) 1-If email is not like string.string@myapp.com, then throw error. 2-If email contains abusive words, then throw error. 3-If password is less than 10 chars, throw error. 

请注意,functiontesting4实际上正在做unit testing1正在做的事情。 有时,functiontesting可能会重复一些(不是全部)由unit testing完成的testing,原因不同。 在我们的例子中,我们使用functiontesting4来检查在input无效input时是否出现特定的错误消息 。 我们不想testing所有错误的input是否被拒绝。 这是unit testing的工作。

unit testing通常由开发人员完成。 这样做的目的是确保他们的代码正常工作。 一般的经验法则是使用unit testing覆盖代码中的所有path。

functiontesting :这是一个很好的参考。 functiontesting说明