2016-10-04 2 views
1

関数呼び出しを検出するためにモックが使用されます。関数オブジェクトが呼び出されるかどうかの単位テスト

#include <functional> 
#include <iostream> 

using namespace std; 

class A { 
    public: 
     A(){}; 
     void doit(){ 
      //... 
      if(f) 
       f(); 
      //... 
     } 
     function<void()> f; 
}; 

int main(){ 
    A a; 
    a.f = []() { cout << "hello\n"; }; 
    a.doit(); 
} 

fが機能doit()で呼ばれていたwheterテストする方法があります:私たちは関数オブジェクトを持つクラスを持っている場合、何が行うことができますか?

+1

呼び出されたときに変更される変数を追加することができます。変更された値があるかどうかを確認します。 – Hayt

+1

Mockでは 'TestHelper'の代わりに' EXPECT_CALL'を – Jarod42

答えて

1

私はちょうど数日前にそれが必要でした。私がやってしまったことは、このようなものだった:私は私のオブジェクトをインスタンス化するとき

class TestHelper 
{ 
public: 
    MOCK_METHOD0(foo, void()); 
}; 

よりも、私はあなたにも、STDを使用することができます(嘲笑機能以上正確にはその機能を使用し、ラムダを渡す::バインド)。

注:また、その関数呼び出しをテストすることを宣言する必要があります。そのためにはEXPECT_CALLがあります。あなたがこれを行うためにGoogleのモックが必要になります

TEST(My_test) 
{ 
    A a; 
    TestUtil helper; 
    EXPECT_CALL(helper, foo()).Times(1); // Or whatever other matcher and action you want to test. 
    a.f = []() { helper.foo(); }; 
    a.doit(); 
} 

注:

あなたの例では、次のようになります。

+0

'FMock = testing :: MockFunction ;を使っています。 https://github.com/google/googletest/blob/master/googlemock/docs/CheatSheet.md#mock-classesをご覧ください。 – PiotrNycz

関連する問題