Golang秒懂----Mock接口测试(gomock和mockgen)

Mock是什么
  • Mock是单元测试中常见的一种技术,就是在测试过程中,对于一些不容易构造或者获取的对象,创建一个Mock对象来模拟对象的行为,从而把测试与测试边界以外的对象隔离开。
  • 优点:
    • 团队并行工作
    • 测试驱动开发 TDD (Test-Driven Development)
    • 测试覆盖率
    • 隔离系统
  • 缺点
    • Mock不是万能的,使用Mock也存在着风险,需要根据项目实际情况和具体需要来确定是否选用Mock。
    • 测试过程中如果大量使用Mock,mock测试的场景失去了真实性,可能会导致在后续的系统性测试时才发现bug,使得缺陷发现的较晚,可能会造成后续修复成本更大
  • Golang拥有mock第三方库,包含gomock包和mockgen工具。
安装
go get github.com/golang/mock/gomock
go get github.com/golang/mock/mockgen
go install github.com/golang/mock/mockgen@v1.6.0
  • 安装完成之后,执行mockgen看命令是否生效
  • 如果显示命令无效,查看GOPATH/bin目录下是否有mockgen二进制文件。如果命令无效但是`GOPATH 路径下的 bin 文件夹中存在 mockgen,请将 GOPATH 下 bin 文件夹的绝对路径添加到全局 PATH 中
生成Mock文件
  • 使用mockgen工具
  • 两种模式:
    • 源码模式:
        mockgen -source 需要mock的文件名 -destination 生成的mock文件名 -package 生成mock文件的包名
      
      • -destination后面要使用绝对路径
    • 反射模式:
        mockgen 路径 需要mock的interface列表
      
      • 路径可以用.表示本层的包
  • 使用案例:
    1. 创建test.go文件,package test
    2. 定义一个接口
      type MyInter interface {
         GetName(id int) string
      }
      
    3. 定义一个函数
       func GetUser(m MyInter, id int) string {
      		user := m.GetName(id)
      		return user
       }
      
    4. 此时要对GetUser测试,就要对接口进行实现,此时可以使用mock
      mockgen -source test.go -destination mock_test.go -package test
      
    5. mock自动生成文件mock_test.go,内容不用动
    6. 创建test_test.go文件,写测试代码
      func TestGetUser(t *testing.T) {
      	//创建gomock控制器,用来记录后续操作信息
      	mockCtl := gomock.NewController(t)
      	//调用mock文件中的NewMockMyInter方法,创建一个MyInter接口的mock实例
      	mockMyInter := NewMockMyInter(mockCtl)
      
      	//EXPECT()接口设置预期返回值
      	mockMyInter.EXPECT().GetName(1).Return("NNNAMEEEEE")
      
      	//将mock的MyInterface传入GetUser函数
      	v := GetUser(mockMyInter, 1)
      
      	if v == "NNNAMEEEEE" {
      		t.Log("right")
      	} else {
      		t.Error("error")
      	}
      }
      
      
    7. 检查结果
      在这里插入图片描述
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值