我是Go的新手并做一个简单的小项目+做测试习惯学习..但我在使用mock设置测试时遇到了麻烦。特别是在设置模拟对象
时样品/ sample.go
package sample
import (
"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.go
package sample_test
import (
"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.MOCK
undefined: sample.EXPECT
任何人都可以指出我做错了什么?我需要先初始化一个模拟对象吗?在嘲笑方法之前?
如果我将GetResponse设为私有[getResponse],我将无法正确模拟它吗?
感谢所有帮助..谢谢!
答案 0 :(得分:5)
我不是gomock专家,但在阅读the gomock GoDoc page后,我发现您的代码存在一些问题。首先,您显然无法使用gomock来模拟包函数(正如您尝试使用sample.GetResponse),只能使用接口。其次,根据“标准用法”,你必须
答案 1 :(得分:3)
测试和覆盖范围:
有关如何使用嘲讽为我们的界面生成嘲讽的更多信息,请参阅→https://github.com/golang/mock 模拟生成命令示例生成模拟接口文件->
mockgen -destination={put the generated mocks in the file} -package={generate mocks for this package} {generate mocks for this interface}
有关更多信息,请参阅-> https://blog.codecentric.de/en/2017/08/gomock-tutorial/
答案 2 :(得分:-3)
我也是新手,但遇到了同样的问题。您需要安装Bazaar
http://wiki.bazaar.canonical.com/Download
然后安装withmock
go get github.com/qur/withmock
go get github.com/qur/withmock/mocktest
然后在命令行中运行
$> withmock go test