2013-05-13 3 views
0

저는 Google Mock을 처음 접했고이 코드로 손을 잡았습니다.이 링크도 확인했습니다. Google 모의 실제 함수 호출 수가 일치하지 않습니다. EXP30_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(); 
} 

이 경우 통과시킬 것인가. 분명히 이것은 매우 유용하지는 않습니다. 일반적으로 테스트중인 객체에 모의 객체를 삽입합니다. 이 경우의 조치는 불필요하므로 다음이 작동합니다.

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

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

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

:

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

구글은 좋은 참조가

관련 문제