+ 收藏我们

网站模板

网站模板搜索
404模板 营销型模板 外贸网站模板 单页模板 双语模板 标签大全
电话:18630701785
首页 > 站长学院 > 我可以模拟一个带有需要使用的指针参数的函数吗 >

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

时间:2024-04-08 08:56:25

你在学习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)
今天带大家了解了的相关知识,希望对你有所帮助;

有问题可以加入网站技术QQ群一起交流学习

本站会员学习、解决问题QQ群(691961965)

客服微信号:lpf010888

Title