我负责单元测试的代码(甚至尚未进行测试)中不断出现一个函数,定义如下:
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
}
答案 0 :(得分:0)
得知间谍仅适用于从接口实现的方法(我很习惯Java,而一切是方法!”),我与老板交谈,他拒绝了将该函数及其使用的所有实例重构为一种方法。
否则,我不得不打破单元测试的核心原则,并担心Get
返回什么。幸运的是,就我而言,它正试图从地图ErrorSt
返回一个Errors
。看到这一点,我只需执行以下操作:
errors := Errors
Errors = map[AccessCode]ErrorSt {
// anything I expect Get to return
}
defer func() { Errors = errors }()
然后我很好走。