我在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()返回结果,而不实际运行它?
谢谢,
答案 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")
}
}