你在学习golang相关的知识吗?本文《我可以模拟一个带有需要使用的指针参数的函数吗》,主要介绍的内容就涉及到,如果你想提升自己的开发能力,就不要错过这篇文章,大家要知道编程理论基础和实战操作都是不可或缺的哦!
问题内容
假设我们有一个库提供了一个函数 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()函数,如何通过模拟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(stackoverflow分支)
解决方案
您可以使用 gomock setarg 函数来实现此目的
yourPackage.EXPECT().insert(&pointer).SetArg(0, newPointer)
今天带大家了解了的相关知识,希望对你有所帮助;