2016-12-27 16 views
1

私はまだGoogle Mockの新しいので、私は行くように学習しています。私はちょうどいくつかの単体テストを追加しています。私は、メソッド内から呼び出されたメソッドを正しくスタブするためにON_CALL()を得ることができない問題に遭遇しました。C++ Google Mock - EXPECT_CALL() - 直接呼び出されないと期待していません

次のコードは、私が持っているものの概要を示しています。私は私のユニットテストで

class simpleClass 
{ 
    public: 
     bool simpleFn1() { return simpleFn2(); } 
     virtual bool simpleFn2() { return FALSE; } 
} 

:私はここに何かを明らかに不足しているしなければならない把握

class simpleClassMocked : public simpleClass 
{ 
    private: 
     MOCK_METHOD0(simpleFn2, bool()); 
} 

class simpleClassTests : public ::testing::Test 
{ 
} 

TEST_F(simpleClassTests, testSimpleFn2) 
{ 
    shared_ptr<simpleClassMocked> pSimpleClass = shared_ptr<simpleClassMocked>(new simpleClassMocked()); 

    ON_CALL(*pSimpleClass, simpleF2()).WillByDefault(Return(TRUE)); 

    // This works as expected - simpleFn2() gets stubbed 
    pSimpleClass->simpleFn2(); 

    // This doesn't work as expected - when simpleFn1 calls simpleFn2 it's not the stubbed expectation??? 
    pSimpleClass->simpleFn1(); 
} 

、誰でも助けることができますか?ありがとう!

+1

あなたのモックされたメソッドは仮想である必要があります。 – PiotrNycz

+0

Argh!それはそれでしょう。ありがとうございます:)私はそれに応じて例を更新しました。 – user7227230

答えて

0

あなたはまた、あなたがpublicエリア

class simpleClassMocked : public simpleClass 
{ 
    public: 
     MOCK_METHOD0(simpleFn2, bool()); 
     MOCK_METHOD0(simpleFn1, bool()); 
} 
でモックメソッドを配置する必要があり

class simpleClass 
{ 
    public: 
     virtual bool simpleFn1() { return simpleFn2(); } 
     virtual bool simpleFn2() { return FALSE; } 
} 

virtualの方法をマークし、simpleClassMockedクラスに対応するMOCK機能を追加する必要があります

これで動作します

関連する問題