【发布时间】:2020-02-03 21:38:20
【问题描述】:
有点像 golang 初学者,但我以前使用过测试框架。如何在不注入依赖项的情况下模拟和伪造依赖方法返回的内容?我不想使用依赖注入的原因是因为使用了许多外部包方法,并且在构造函数中注入所有方法很笨拙。
我已经搜索了这个在线/stackoverflow,解决方案是始终使用依赖注入。有时这不是一个可行的选择。
这是我在代码方面尝试做的事情:
b/b_test.go
package b
func TestResults(t *testing.T) {
t.Run("Test", func(t *testing.T) {
b := NewB()
// How do I mock out and fake a.DoSomething() to be
// "complete" instead of whats in the code right now?
result = b.Results()
assert.Equal(t, "complete", result)
}
}
b/b.go
package b
import "a"
type B struct {}
func NewB() B {
return &B{}
}
func (b B) Results() {
return a.DoSomething()
}
a/a.go
package a
func DoSomething() {
return "done"
}
谢谢!
【问题讨论】:
-
如果你想使用模拟,你的选择几乎是 a) 依赖注入,或 b) 服务定位器。使用模拟的代码必须从外部某个地方获取模拟,这可以决定它是获取模拟还是真正的实现。
-
你是否需要编写一个包 b/b.go 的测试用例,它具有 a/a.go 的实现,你需要使用接口伪造你的 a/a.go 调用
标签: unit-testing testing go