go mock模拟接口的实现

简介
mock翻译过来是‘模拟’的意思,也就是模拟接口返回的信息,用已有的信息替换接口返回的信息,从而提供仿真环境,实现模拟数据下的功能测试;

在多人合作编码时,你写的一个函数func DoSth(People)用到了别人写的People接口。此时你的函数已经写好了,但是实现People接口的程序员还在磨蹭,而这时你想要测试func DoSth()是否正确运行,就需要gomock接口模拟技术。


导包
安装gomock包以及mockgen(mock代码生成器)

1

2

go get -u github.com/golang/mock/gomock

go install github.com/golang/mock/mockgen

使用步骤

1.构造代码
type People interface {

    GetName() string

    GetAge() int

}

func GetPeopleInfo(people People) {

    //调用接口

    println("name:", people.GetName(), "age:", people.GetAge())

}

示例构造了一个函数GetPeopleInfo(People),调用了People接口。

2.使用mockgen生成mock代码

mockgen主要有两种使用方式:

1.通过source构建:从源文件生成 mock 接口(通过 -source 启用)

1

mockgen -source=foo.go [other options]

2.通过reflect构建:通过使用反射程序来生成 mock 接口。它通过传递两个非标志参数来启用:导入路径和逗号分隔的接口列表

1

mockgen database/sql/driver Conn,Driver

具体参数可以在命令行输入mockgen进行查看。

本文中使用2进行mock代码的构建

代码结构:

Test

├── gomock2

       └── db.go

使用的mockgen命令:

1

mockgen  -destination db_mock.go -package gomock2 Test/gomock2 People

-destination db_mock.go:表明生成的mock代码存放在db_mock.go
-package gomock2:生成代码所属包名为gomock2
Test/gomock2 People :对Test/gomock2下的People接口进行模拟 

成功后会生成db_mock.go文件。

3.建立测试用例
func TestGetFromDB(t *testing.T) {

     //创建mock控制器,控制器

    controller := gomock.NewController(t)

    defer controller.Finish()//触发最后的断言

    mockPeople := NewMockPeople(controller)

    mockPeople.EXPECT().GetName().Return("yi")

    mockPeople.EXPECT().GetAge().Return(18).Times(1) //预计返回18并被调用1次

    //调用测试方法 

    GetPeopleInfo(mockPeople)

}

主要有下面几个步骤:
1.创建mock控制器,控制器定义了mock对象的作用域、生命周期、期待值。
2. defer controller.Finish():触发断言,判断结果是否符合预期。
3. 创建Mock对象:Mock对象实现了要模拟的接口。
4. 设计预期值,接口的输入、返回。
5. 调用测试方法。


go:generate生成mock代码
在interface所对应的go文件中加入注释:

1

//go:generate mockgen  -destination db_mock.go -package gomock2 Test/gomock2 People

随后在命令行的当前目录下执行下面语句就能自动生成mock代码

1

go generate

或者在项目根目录输入,执行当前项目中所有go:generate注释表示的内容。

1

go generate ./...

总结:

感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助

 视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。  

  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值