2017-06-05 75 views
3

我使用testify來測試我的代碼,我想檢查一個函數是否被調用。AssertCalled總是與作證庫失敗

我做了以下內容:

type Foo struct { 
    mock.Mock 
} 

func (m Foo) Bar() { 

} 

func TestFoo(t *testing.T) { 
    m := Foo{} 
    m.Bar() 
    m.AssertCalled(t, "Bar") 
} 

的錯誤我得到:

Error:  Should be true 
Messages: The "Bar" method should have been called with 0 argument(s), but was not. 

mock.go:419: [] 

我通話功能「酒吧」,馬上問,如果它被稱爲但是它返回false。 我在做什麼錯? 什麼是正確的方式來測試一個函數是否與testify一起被調用?

回答

2

我想這個和工作原理:

type Foo struct {                                      
    mock.Mock                                       
}                                          

func (m *Foo) Bar() {                                     
    m.Called()                                       
}                                          

func TestFoo(t *testing.T) {                                   
    m := &Foo{}                                       
    m.On("Bar").Return(nil)                                    

    m.Bar()                                        
    m.AssertCalled(t, "Bar")                                   
} 

如前所述通過克里斯·德魯,你已經使用上酒吧方法的聲明接收器的指針。

此外,你必須將一個新結構作爲指針,並模擬返回值的方法。

+0

謝謝,我也回答了GitHub :) – Buzzy

0

看着documentation of testify我認爲你必須明確地調用func (*Mock) Called告訴模擬對象一個方法已被調用。

func (m *Foo) Bar() { 
    m.Called() 
} 

有證據測試中有some examples

+0

我在發帖前試過,但它只是產生以下錯誤:「assert:mock:我不知道該返回什麼,因爲方法調用是意外的。」 – Buzzy

+0

我認爲這可能是因爲你的方法通過值接收接收器,所以只有模擬副本正在更新。嘗試使用指針接收器。我已經更新了我的答案。 –

+0

也沒有工作:( – Buzzy