2017-06-05 12 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

を見ると、func (*Mock) Calledを明示的に呼び出して、メソッドが呼び出されたことをモックオブジェクトに伝える必要があると思います。

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

証言試験には、some examplesがある。

+0

私は投稿する前にそれを試みましたが、次のエラーが生成されます。 "assert:mock:メソッド呼び出しが予期しなかったため返される内容がわかりません。 – Buzzy

+0

あなたのメソッドは値でレシーバを受け取り、モックのコピーだけが更新されているからかもしれないと思います。ポインタ受信機を使用してみてください。私は私の答えを更新しました。 –

+0

どちらも動作しませんでした:( – Buzzy

関連する問題