从包中嘲笑方法

时间:2017-11-16 11:48:59

标签: unit-testing go mocking

我希望模拟一些单元测试方法。不幸的是,代码结构不是很好。

var config = struct { abc *abc }

func Init(arg1) {
    // config.abc = newAbc(arg2, arg3)
}   

func UnitTestThis() { 
    //some code here 

    config.abc.Search(arg4,arg5) 

    //code here 
}

如何对UnitTestThis函数进行单元测试,模拟搜索方法的结果?我一直在尝试创建一个界面并模拟方法,但是无法这样做。

1 个答案:

答案 0 :(得分:1)

如果config.abc字段是具体类型(或指向具体类型的指针),则无法模拟它。

你需要一些重构。

使用界面

最好将config.abc的类型更改为接口类型,因此在测试中,您可以创建自己的实现并分配给它,并且您可以在其中执行任何操作。

使用config.abc.Search

上的方法值

另一种选择是创建一个函数类型的变量来保存config.abc.Search()的{​​{3}},并在测试中为其分配一个新值,例如method value

这就是它的样子:

var config = struct{ abc *abc }{}

var searchFunc func(arg4Type, arg5Type)

func Init(arg1) {
    config.abc = newAbc(arg2,arg3)
    searchFunc = config.abc.Search
}

func UnitTestThis() {
    //some code here
    searchFunc(arg4, arg5)
    //code here
}

在此处详细了解:function literal