来自同一程序包与不同程序包的具有相关功能的单元测试

时间:2019-05-24 21:03:02

标签: go

我有一个函数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{} 

我不需要创建函数类型,因此更简单。

我想知道这里的模式是什么?

0 个答案:

没有答案