在Golang中存根函数

时间:2018-08-20 16:38:56

标签: unit-testing go

我负责单元测试的代码(甚至尚未进行测试)中不断出现一个函数,定义如下:

val blaLines = Source.fromInputStream( getClass.getResourceAsStream("/bla.txt") ).getLines

到目前为止,我已经尝试通过几种方法来调用它。我的本能是对函数进行存根或spy on,但这失败了。

此功能在我的雇主API的许多地方都使用过,因此我无法更改它(如果这样做,它将破坏很多事情)。有什么方法可以进行真正的单元测试并将其测试加倍吗?

我的间谍尝试:

//Get Retreives an error with the given access code.
func Get(code AccessCode) *ErrorSt {
    if err, ok := Errors[code]; ok {
        err.Stack = utilityCore.GetCleanStack(logger.Instance.GetProjectNames())
        return &err
    }
    err := NewError(string(ACPanic), fmt.Sprintf("Error '%s' can't be retreived.", code), ESSystem, SError)
    return err
}

1 个答案:

答案 0 :(得分:0)

得知间谍仅适用于从接口实现的方法(我很习惯Java,而一切是方法!”),我与老板交谈,他拒绝了将该函数及其使用的所有实例重构为一种方法。

否则,我不得不打破单元测试的核心原则,并担心Get返回什么。幸运的是,就我而言,它正试图从地图ErrorSt返回一个Errors。看到这一点,我只需执行以下操作:

errors := Errors
Errors = map[AccessCode]ErrorSt { 
    // anything I expect Get to return 
}

defer func() { Errors = errors }()

然后我很好走。