温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Go语言中怎么使用stub和mock实现单元测试

发布时间:2021-08-03 14:19:28 来源:亿速云 阅读:228 作者:Leah 栏目:大数据

本篇文章给大家分享的是有关Go语言中怎么使用stub和mock实现单元测试,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

1. mock例子:

mock 的做法是创建一个struct,然后实现所需要接口中的函数,在测试的时候,将调用的接口替换成测试mock出来的struct就可以了。

mock采用的替换,是替换整个接口的方式(备注:接口可以是入参,也可以是struct中的变量,不过都需要在测试之前,替换完成)。

例子如下:

GetType函数原本是根据不同的入参yu,多不同的操作,加、减和赋值为零。

在mock之后,指定GetType类型只做一种操作 “加法”。

Go语言中怎么使用stub和mock实现单元测试

Output:

Go语言中怎么使用stub和mock实现单元测试

通过输出可以看出,mock之前的是三种操作,mock替换之后变成了一种操作加法。

2. stub例子:

使用stub做单元测试的话,代码是侵入式的,需要将对应的函数做成回调函数的方式,以方便后续的测试代码可以将这个函数替换成,测试希望指定的功能实现。

例子如下:(备注:这个例子比较简单,只是为了演示stub的使用。)

GetType函数原本是根据不同的入参,多不同的操作,加、减和赋值为零。

在Stub之后,指定GetType类型只做一种操作 加法。

Go语言中怎么使用stub和mock实现单元测试

Output:

Go语言中怎么使用stub和mock实现单元测试

打桩之前:功能函数会根据入参的数值,来做不同的操作,输出不同的结果,分别是 :取0;做加法:2+5 = 7;做减法:5-1 = 4。

打桩之后:桩函数StubFunc只返回一种操作“加法”,所以测试用例不管入参的类型是什么,都是按照加法来操作,分别是:1+3 = 4;2+5 = 7; 5+1 = 6;

三、mock与stub的比较

1)mock和stub都是采用替换的方式来实现,被测试的函数中的依赖关系,不过mock采用的是接口替换的方式,stub采用的是函数替代的方式。

2)mock的实现对功能代码没有侵入性,stub的侵入性比较强,在实现功能函数的时候,就需要为了测试设置一些回调函数,也就是这里所谓的桩。

3)对于控制被替代的方法来讲,mock如果想支持不同的输出,就需要提前实现不同的分支代码,甚至需要定义不同的mock结构体来实现,这样的mock代码会变成一个支持所有逻辑分支的一个最大集合,mock代码复杂性会变高;stub却能很好的控制桩函数的不同分支,因为stub替换的是函数,那么只要需要再用到这种输出的时候,定义一个函数即可,而这个函数甚至都可以是匿名函数。

基于上面的分析,我们可以设计一种方式,让stub和mock结合起来,例子如下:

被测试代码与mock例子中的一致,mock的代码中新增了回调函数和是否使用回调函数2个变量,在测试用例中,通过实现不同的stub函数来控制桩函数的输出结果。

Go语言中怎么使用stub和mock实现单元测试

Output:

Go语言中怎么使用stub和mock实现单元测试

从测试用例运行的结果来看,在stub函数是“加法”的时候,前两个用例,都会执行“加法”操作;在stub是“减法”的时候,最后一个用例会执行“减法”操作。

以上就是Go语言中怎么使用stub和mock实现单元测试,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注亿速云行业资讯频道。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI