gpt4 book ai didi

go - 我可以模拟一个需要使用的带有指针参数的函数吗

转载 作者:行者123 更新时间:2023-12-01 22:37:17 25 4
gpt4 key购买 nike

假设我们有一个库提供了一个函数 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com