mock翻译过来是‘模拟’的意思,也就是模拟接口返回的信息,用已有的信息替换接口返回的信息,从而提供仿真环境,实现模拟数据下的功能测试;
在多人合作编码时,你写的一个函数func DoSth(People)用到了别人写的People接口。此时你的函数已经写好了,但是实现People接口的程序员还在磨蹭,而这时你想要测试func DoSth()是否正确运行,就需要gomock接口模拟技术。
安装gomock包以及mockgen(mock代码生成器)
1 2 |
|
1 2 3 4 5 6 7 8 |
|
示例构造了一个函数GetPeopleInfo(People),调用了People接口。
mockgen主要有两种使用方式:
1.通过source构建:从源文件生成 mock 接口(通过 -source 启用)
1 |
|
2.通过reflect构建:通过使用反射程序来生成 mock 接口。它通过传递两个非标志参数来启用:导入路径和逗号分隔的接口列表
1 |
|
具体参数可以在命令行输入mockgen进行查看。
本文中使用2进行mock代码的构建
代码结构:
1 2 3 |
|
使用的mockgen命令:
1 |
|
-destination db_mock.go:表明生成的mock代码存放在db_mock.go
-package gomock2:生成代码所属包名为gomock2
Test/gomock2 People :对Test/gomock2下的People接口进行模拟
成功后会生成db_mock.go文件。
1 2 3 4 5 6 7 8 9 10 |
|
主要有下面几个步骤:
1.创建mock控制器,控制器定义了mock对象的作用域、生命周期、期待值。
2. defer controller.Finish():触发断言,判断结果是否符合预期。
3. 创建Mock对象:Mock对象实现了要模拟的接口。
4. 设计预期值,接口的输入、返回。
5. 调用测试方法。
在interface所对应的go文件中加入注释:
1 |
|
随后在命令行的当前目录下执行下面语句就能自动生成mock代码
1 |
|
或者在项目根目录输入,执行当前项目中所有go:generate注释表示的内容。
1 |
|
?现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:485187702【暗号:csdn11】
最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走!?希望能帮助到你!【100%无套路免费领取】