gomock简明教程
1.定义 gomock是一个用于Go语言的Mock框架, 它可以帮助开发者在单元测试中模拟(Mock)接口的行为, 从而隔离被测试代码与外部依赖,使测试更加独立、稳定和高效。 项目原地址为 golang/mock 2023年6月之后,代码库已经归档,官方推荐使用go.uber.org/mock 2.安装 go install go.uber.org/mock/mockgen@latest 3.生成Mock代码 有文件itf.go mockgen -source=./itf.go -destination=./mock.go -package=mymock -source:指定包含接口定义的源文件。 -destination:用于写入结果源代码的文件。 -package:指定生成的Mock代码所在的包名。 4.单元测试 预设的请求,可以按照顺序调用或非顺序调用 4.1 非顺序调用 import ( "fmt" "go.uber.org/mock/gomock" "testing" ) func TestFoo(t *testing.T) { // 创建Mock控制器 ctrl := gomock.NewController(t) defer ctrl.Finish() m := NewMockFoo(ctrl) m.EXPECT().Bar(1).Return(1) m.EXPECT().Bar(2).Return(2) fmt.Println("--1--", m.Bar(2)) fmt.Println("--2--", m.Bar(1)) } output: --1-- 2 --2-- 1 可以按照任意顺序调用Bar() 4.2 顺序调用 func TestFoo2(t *testing.T) { // 创建Mock控制器 ctrl := gomock.NewController(t) defer ctrl.Finish() m := NewMockFoo(ctrl) gomock.InOrder( // 必须按照指定顺序调用Bar() m.EXPECT().Bar(1).Return(1), m.EXPECT().Bar(2).Return(2), ) fmt.Println("--1--", m.Bar(2)) fmt.Println("--2--", m.Bar(1)) } 单元测试运行错误 ...