当我尝试对以下功能进行单元测试时,其中extern_pkg
是要模拟的外部软件包:
import "extern_pkg"
func MyFunc() {
...
extern_pkg.F()
}
func main() {
MyFunc()
}
我读了一些博客,他们似乎都通过使用依赖注入修改产品代码来实现这一目标。例如,如下:
type exter interface {
F()
}
func MyFunc(e exter) {
...
e.F()
}
type extpkg struct{}
func (extpkg) F() {extern_pkg.F()}
func main() {
epkg := extpkg{}
MyFunc(epkg)
}
然后在测试代码中,创建一个满足exter
接口的模拟对象,并将其作为参数传递给MyFunc
。
我的问题是:
MyFunc
函数包含许多要模拟的外部程序包,我是否需要将每个DI都作为函数参数?函数所依赖的任何全局变量是否也正确?var global_var
func MyFunc() {
...
extern_pkg1.F()
...
extern_pkg2.G()
...
extern_pkg3.H()
...
global_var
}
谢谢!