一尘不染

是否可以模拟从golang包中导入的函数?

go

我有以下测试方法,该方法使用从包中导入的函数。

import x.y.z

func abc() {
    ...
    v := z.SomeFunc()
    ... 
}

可以SomeFunc()在golang中进行模拟吗?


阅读 194

收藏
2020-07-02

共1个答案

一尘不染

是的,只需进行简单的重构即可。创建一个zSomeFunc函数类型的变量,用初始化z.SomeFunc,并让您的包调用而不是z.SomeFunc()

var zSomeFunc = z.SomeFunc

func abc() {
    // ...
    v := zSomeFunc()
    // ...
}

在测试中,您可以为分配另一个功能zSomeFunc,该功能是在测试中定义的,并且可以执行测试所需的功能。

例如:

func TestAbc(t *testing.T) {
    // Save current function and restore at the end:
    old := zSomeFunc
    defer func() { zSomeFunc = old }()

    zSomeFunc = func() int {
        // This will be called, do whatever you want to,
        // return whatever you want to
        return 1
    }

    // Call the tested function
    abc()

    // Check expected behavior
}
2020-07-02