我有一个函数Squre,它依赖于另一个函数GiveMeNumber。
所以我需要模拟这个依赖函数来进行单元测试。
User
有2种情况: 1.函数GiveMeNumber在同一包中。 2.函数GiveMeNumber位于不同的程序包中。
我的想法:
情况2: 选择method2是因为: 对于method1,缺点是程序包级别的变量可能会被意外修改。因此最好选择method2。
情况1: 我可以修改“ GiveMeNumber”签名。
我在选择1和2之间感到困惑。 方法1, 我将需要将功能GiveMeNumber()int更改为
导出:
import (
"math/rand"
)
func Squre() int{
n := GiveMeNumber()
return n * n
}
func GiveMeNumber() int{
return rand.Intn(20)
}
// method1
var numGenerator = GiveMeNumber
func Squre() int{
n := numGenerator()
return n * n
}
// test:
func TestSqure(){
oldNumGenerator := numGenerator
numGenerator = func()int {return 10}
defer func(){numGenerator = oldNumGenerator}()
// Call Squre to test
}
// method2
type numGenerator = func()int
func Squre() int{
return squre(GiveMeNumber)
}
func squre(generator numGenerator) int{
n := generator()
return n * n
}
// test squre only:
func TestSqure(){
// squae(func()int {return 10})
}
未导出:
var GiveMeNumber = func()int{}
我不需要创建函数类型,因此更简单。
我想知道这里的模式是什么?