golang单元测试:内部函数参数

时间:2017-03-02 01:00:44

标签: testing go

我在go函数中有简单的工作流程,但是在进行单元测试时,我坚持将参数传递给内部函数,或者模拟内部函数返回结果。

package myFunc

import (
    myPackage
    bookPackage
)

func Init() (err error) {
    err = getResource(myPackage.GetPath())
    ...
}

func getResource(path string) (err error) {
    // get resource from path ...
    err := bookPackage.GetBook(path)
}

试验:

package myFunc

import "testing"

func TestInit(t *testing.T) {
    if err := Init(); err != nil {
        t.Fatal("test failed")
    }
}

结果:

--- FAIL: TestInit (0.00s)
Failed to read path ...

这种情况的一般解决方案是什么?例如,如果getResource()调用getBooks()并且其参数来自另一个源?

如何模拟getBooks()返回结果,而不实际运行它?

谢谢,

1 个答案:

答案 0 :(得分:0)

我假设这不是真正的代码,因为你正在调用未导出的函数? myPackage.getPath()永远不会有用。

无论如何,我倾向于这样做的方法是输出我需要改变的任何东西以便测试:

package myPackage

var Path string

func init() {
    Path = "/path/to/default/path"
}

func GetPath() {
    return Path
}

然后在测试时,您可以将该变量覆盖到您需要的任何变量:

package myFunc

import (
    "testing"
    "myPackage"
)

func TestInit(t *testing.T) {
    myPackage.Path = "/test/path"
    if err := Init(); err != nil {
        t.Fatal("test failed")
    }
}