【发布时间】:2020-12-02 07:12:01
【问题描述】:
我是 Golang 新手,一直在探索,但不清楚单元测试中的 mocking。谁能解释以下具体问题?
问题1:在 Golang 中编写单元测试,为什么我们需要有接口来模拟方法,为什么不只是 struct ?
问题2:为什么我们在struct中注入接口(我们在其中调用外部方法)
带结构-
type GlobalData struct {}
var (
GlobalObj = GlobalData{}
)
func (g GlobalData) GetGlobalData(a string) string{
return a
}
有接口定义-
type GlobalInterface interface {
GetGlobalData(a string) string
}
type GlobalData struct {}
var (
GlobalObj = GlobalData{}
)
func (g GlobalData) GetGlobalData(a string) string{
return a
}
谢谢
【问题讨论】:
-
很大一部分单元测试可以(并且已经)在不引入接口和模拟的情况下完成。我不知道你有没有得到这些信息。查看标准库中的单元测试,了解 Go 中的实际最佳测试实践。
-
如果你想使用模拟,你必须使用几乎所有语言的界面。接口是您可以在测试中用模拟或生产中的真实实现替代的类型。这是嘲笑的基本品质。
-
@Volker,谢谢,您能提供任何参考吗?因为我的探索使我使用接口来模拟方法。
-
@Adrian,感谢您提供信息。你能解释一下它背后的逻辑吗,我们不能用struct来模拟吗?
-
结构是一种实现。为了能够交替使用两种不同的实现(模拟 a 和真实实现),您必须使用接口。
标签: unit-testing go struct interface mocking