2016-12-27 1 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

아! 그게 될거야. 고마워요. 나는 그에 맞게 예제를 업데이트했다. – user7227230

답변

0

, 당신은 public 영역에서 모의 ​​방법을 둘 필요는 virtual 같은 방법을 표시하고 simpleClassMocked 클래스 또한

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

에 해당 MOCK 기능을 추가해야

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

이제 작동 할 것입니다

관련 문제