2011-05-07 2 views
4

은의이 예제를 보자어떻게 구조체에서 호출하는 방법을 구글 모의에

A a; 
struct B{ 
    int res = a.Get(); 
} 
내가 그러나 나는 또한 것이다, 방법을 얻기 구글 모의에 필요

진짜 한테 전화 할 필요가있어. 나는 #ifdef로 시도해 봤는데 작동하는 것 같다. 그렇다면 #ifdef 섹션에서 조롱하기로 결정했지만 아무 것도하지 않습니다.

#ifdef UNIT_TEST 
MOCK_METHOD0(A,Get); 
#else 
int A::Get(){....} 
#endif 

내가 뭘 잘못하고 있니? 그것을 할 수있는 더 깨끗한 방법이 있습니까? 제발, 어떤 도움을 주셔서 감사합니다.

+0

게시 한 코드는 C++가 아닙니다. –

+0

동일한 사용자가 게시 한 http://stackoverflow.com/questions/5921238/how-to-google-mock-a-method-called-from-a-struct의 거의 정확한 부분입니다. –

+0

@unapersson 물론 C++입니다. –

답변

-1

헤더 파일 :

class A{ 
    public: 
     int Get(); 
}; 
A a; 

소스 파일 :

int A::Get(){ 
    .... 
} 

struct B{ 
    return res = a.Get(); 
}; 
+0

이것이 바로 지금의 상황입니다. 그래도 코드를 많이 바꿀 수는 없지만 ... – Manolete

2

잘못 처리했습니다. 이것은 수행해야하는 방법입니다

1) 헤더 파일 :

struct A 
    { 
    #ifdef UNIT_TEST 
     MOCK_METHOD0(Get, int()); 
    #else 
     int Get(); 
    #endif 
    }; 

2) 소스 파일 :

#ifndef UNIT_TEST 
int A::Get() 
{ 
    // ... 
} 
#endif 
+0

물론 C++입니다. 간단하게 만들었습니다. @VJo int Get() {}은 다른 구조체 (FSM)를 많이 사용하여 구조체 외부에 이미 정의되어 있으므로 구조체 내에서 재정의 할 수 없습니다. – Manolete

+0

철자가 틀린 단어는 유감이지만 아이디어는 표시해야했습니다. C++ 코드. – Manolete

+0

@Manuel Ok, 예제 수정 –

1

Google Mock이 꽤 많이 변경된 것으로 보입니다. 이제 요리 책에 설명 된 delegating to a real object을 시도해보십시오. 당신은 당신의 모의에 대한 기대치를 계속 세팅하고 점검 할 수 있지만, 실제 전화로도 통화가 처리 될 것입니다.

class MockA : public A 
{ 
public: 
    MockA() 
    { 
     ON_CALL(*this, Get()).WillByDefault(Invoke(&real, &A::Get)); 
    } 
    MOCK_METHOD0(Get, int()); 

private: 
    A real; 
}; 
관련 문제