2012-02-09 3 views
1

2 개의 수업이 있습니다.Google 모의 도움이 필요합니다.

class SomeClass 
{ 
public: 
    int SomeFunction() 
    { 
     return 5; 
    } 
}; 


class AnotherClass 
{ 
public: 
    int AnotherFunction(SomeClass obj) 
    { 
     return obj.SomeFunction(); 
    } 
}; 

SomeClass에 대한 모의 수업을 만들었습니다.

class MockSomeClass : public SomeClass 
{ 
public: 
    MOCK_METHOD0(SomeFunction, int()); 
}; 

이제 유닛 테스트에서 AnotherClass.AnotherFunction을 호출 할 때 자신이 선택한 결과를 얻고 싶습니다. AnotherFunction은 SomeClass.SomeFunction() 함수를 사용합니다. 나는 SomeClass를 조롱했다. 조롱 된 객체의 함수가 후퇴 10을 호출 할 때 그것을 설정했습니다.하지만 단위 테스트를 실행하면 5 (원래 함수)가 반환됩니다. 어떻게해야합니까? 아래는 제가 작성한 단위 테스트입니다.

[TestMethod] 
    void TestMethod1() 
    { 
     MockSomeClass mock; 
     int expected = 10; 
     ON_CALL(mock, SomeFunction()).WillByDefault(Return(expected)); 
     AnotherClass realClass; 
     int actual = realClass.AnotherFunction(mock);   
     Assert::AreEqual(expected, actual); 
    }; 

저는 visual studio 2008 및 gmock 1.6.0을 사용하고 있습니다. 내가 뭘 잘못하고있어. realClass.AnotherFunction에 난 mock.SomeFunction()에서 조롱 된 출력 싶어요.

답변

3

문제는 SomeClass :: SomeFunction (...)이 가상이 아니며 가상으로 만들어 작동한다는 것입니다.

업데이트 :가 실패합니다 하나 더 근본적인 오류가 있습니다

, 즉 원인을 차례 그것에있는 새로운 SomeClass 개체의 인스턴스를 생성

int AnotherFunction(SomeClass obj) 

의 방법 서명이 정상적인 SomeFunction이 호출되면, 대신 조롱 된 클래스에 대한 참조를 인수로 전달해야합니다.

int AnotherFunction(SomeClass* obj) 

그리고 난 그 짓을

int actual = realClass.AnotherFunction(&mock); 
+0

사용하여 호출합니다. 하지만 작동하지 않습니다. 여전히 10 대신에 5를 반환합니다. –

+0

@fhnaseer 실제 코드를 보여줍니다. –

+0

감사합니다. 레퍼런스를 통과하면 문제가 해결되고, –