我有以下测试方法,该方法使用从包中导入的函数。
import x.y.z func abc() { ... v := z.SomeFunc() ... }
可以SomeFunc()在golang中进行模拟吗?
SomeFunc()
是的,只需进行简单的重构即可。创建一个zSomeFunc函数类型的变量,用初始化z.SomeFunc,并让您的包调用而不是z.SomeFunc():
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 }