1 回答

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超13個(gè)贊
如果你想測(cè)試B,看看它是否真的調(diào)用了A的Foo函數(shù),你需要模擬出A對(duì)象。由于您要檢查的函數(shù)是Foo
,只需創(chuàng)建一個(gè)僅包含該函數(shù)的簡(jiǎn)單Fooer
接口(這就是您在 Go 中所稱(chēng)的函數(shù)加上 'er')。將 B 對(duì) A 的引用替換為對(duì) Fooer 的引用,就可以了。我在 Go Playground 上根據(jù)您的代碼創(chuàng)建了一個(gè)小示例:
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 關(guān)注
- 161 瀏覽
添加回答
舉報(bào)