登录
首页 >  Golang >  Go问答

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

来源:stackoverflow

时间:2024-04-03 23:00:34 373浏览 收藏

你在学习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)

今天带大家了解了的相关知识,希望对你有所帮助;关于Golang的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>