假设我们有一个库提供了一个函数 Double 来加倍整数,我们使用指针 i 来获取结果值而不是通过返回:
package api
type Action interface {
Double(i *int) error
}
type NUM struct{}
func (n NUM) Double(i *int) error {
*i *= 2
return nil
}
在我们的主要功能中,我们使用这个库来完成我们的任务。像这样:
package app
import (
"fmt"
"github.com/hotsnow/api"
)
func main() {
j := job{a: &api.NUM{}}
d := j.task(3)
fmt.Println(3, d)
}
type job struct {
a api.Action
}
// double me
func (j job) task(i int) int {
j.a.Double(&i)
return i
}
现在我们要测试task()函数,如何通过mock Double函数获取指针返回?
这是测试:
package app
import (
"github.com/golang/mock/gomock"
"github.com/hotsnow/mocks"
"testing"
)
func TestReq(t *testing.T) {
ctrl := gomock.NewController(t)
defer ctrl.Finish()
m := mocks.NewMockAction(ctrl)
m.EXPECT().Double(gomock.Any()).Return(nil)
j := job{a: m}
got := j.task(3)
if got != 6 {
t.Errorf("got = %#v; want 6", got)
}
}
这里的代码:https://github.com/hotsnow/mock.git (计算器分支)
最佳答案
你可以使用 gomock setarg这个功能
yourPackage.EXPECT().insert(&pointer).SetArg(0, newPointer)
关于go - 我可以模拟一个需要使用的带有指针参数的函数吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59385184/