我是 Go 新手,正在做简单的小项目 + 做测试习惯来学习..但是我在使用模拟设置测试时遇到了麻烦。特别是在设置模拟对象样品/样品。去package sampleimport ( "fmt" "net/http")func GetResponse(path, employeeID string) string { url := fmt.Sprintf("http://example.com/%s/%s", path, employeeID) // made some request here // then convert resp.Body to string and save it to value return value}func Process(path, employeeID string) string { return GetResponse(path, employeeID)}样本/sample_test.gopackage sample_testimport ( "testing" "github.com/example/sample" // want to mock some method on this package)func TestProcess(t *testing.T) { ctrl := gomock.NewController(t) defer ctrl.Finish() sample.MOCK()SetController(ctrl) sample.EXPECT().GetResponse("path", "employeeID").Return("abc") v := sample.GetResponse("path", "employeeID") fmt.Println(v)}每次我运行这个go test我总是收到错误undefined: sample.MOCKundefined: sample.EXPECT任何人都可以指出我做错了什么?我需要先初始化一个模拟对象吗?在嘲笑方法之前?如果我将 GetResponse 设为私有 [getResponse],我将无法模拟它,对吗?感谢所有帮助..谢谢!
2 回答
当年话下
TA贡献1890条经验 获得超9个赞
我不是 gomock 专家,但在阅读gomock GoDoc 页面后,我发现您的代码存在几个问题。首先,您显然不能使用 gomock 来模拟包函数(就像您尝试使用 sample.GetResponse 那样),只能使用接口。二、按照“标准用法”,你要
定义要模拟的接口(例如 FooInterface)
使用 mockgen 从该接口生成模拟
使用函数 NewMockFooInterface() 创建一个 mockObj
然后 mockObj 将拥有您想要调用的方法(即 EXPECT())
- 2 回答
- 0 关注
- 273 浏览
添加回答
举报
0/150
提交
取消