2013-05-13 37 views
0

我是Google Mock的新手,正在嘗試使用此代碼,我也檢查了此鏈接。Google Mock實際函數調用次數不匹配EXPECT_CALL

Actual function call count doesn't match EXPECT_CALL(*mock, display())

,但沒有能夠得到合適的輸入。

Base.cc

class Base 
{ 
    int val; 
    string msg; 
    public: 
    Base():val(0), msg("world"){} 
    virtual ~Base(){} 
    virtual void set(int x, string msg) 
    { 
      this->val = val; 
      this->msg = msg; 
    } 
    virtual void get() 
    { 
      cout << "val :" << this->val << endl; 
      cout << "msg :" << this->msg << endl; 
    } 
}; 
class MockBase : public Base 
{ 
    public: 
    MOCK_METHOD0(get, void()); 
    MOCK_METHOD2(set, void(int val, string msg)); 
}; 

Base_unittest.cc

int main(int argc, char * argv[]) 
{ 
    std::cout << "in main" << endl; 
    ::testing::InitGoogleTest(&argc,argv); 
    return RUN_ALL_TESTS(); 
} 
TEST(Base, case1) 
{ 
    MockBase obj; 
    EXPECT_CALL(obj, get()).WillOnce(::testing::Return()); 
} 
TEST(Base, case2) 
{ 
    MockBase obj; 
    EXPECT_CALL(obj, set(2,"hello")).WillOnce(::testing::Return()); 
} 

我得到錯誤:

Actual function call count doesn't match EXPECT_CALL(obj, get())...

Actual function call count doesn't match EXPECT_CALL(obj, set(2,"hello"))...

所以請幫助,如果新手任何教程,請參閱。

回答

5

你的期望是說當obj被銷燬時,你期望該函數被調用一次。您正在失敗,因爲該函數實際上並未被調用。

TEST(Base, case1) 
{ 
    MockBase obj; 
    EXPECT_CALL(obj, get()).WillOnce(::testing::Return()); 
    obj.get(); 
} 

會導致此情況通過。顯然這不是很有用,通常你會將模擬注入到被測對象中。還請注意,在這種情況下的行動是不必要的,以下將起作用。

TEST(Base, case1) 
{ 
    MockBase obj; 
    EXPECT_CALL(obj, get()); 
    obj.get(); 
} 

谷歌有一些很好的參考:

http://code.google.com/p/googlemock/wiki/ForDummies

http://code.google.com/p/googlemock/wiki/CheatSheet

http://code.google.com/p/googlemock/wiki/CookBook