1 回答
TA贡献1829条经验 获得超13个赞
如果你想测试B,看看它是否真的调用了A的Foo函数,你需要模拟出A对象。由于您要检查的函数是Foo
,只需创建一个仅包含该函数的简单Fooer
接口(这就是您在 Go 中所称的函数加上 'er')。将 B 对 A 的引用替换为对 Fooer 的引用,就可以了。我在 Go Playground 上根据您的代码创建了一个小示例:
package main
import "testing"
type A struct {
}
func (a *A) Foo() {}
type Fooer interface {
Foo()
}
type B struct {
a Fooer
}
func (b *B) Bar() {
b.a.Foo()
}
func main() {
var a A
var b B
b.a = &a
b.Bar()
}
// in your test:
type mockFooer struct {
fooCalls int
}
func (f *mockFooer) Foo() {
f.fooCalls++
}
func Test(t *testing.T) {
var mock mockFooer
var bUnderTest B
bUnderTest.a = &mock
bUnderTest.Bar()
if mock.fooCalls != 1 {
t.Error("Foo not called")
}
}
- 1 回答
- 0 关注
- 122 浏览
添加回答
举报