2011-08-23 7 views
3

는 인터페이스조롱 된 함수에 전달 된 인수에서 멤버 함수를 호출하는 가장 쉬운 방법은 무엇입니까?

class IFooable { 
    virtual void Fooable() = 0; 
}; 

class IFoo { 
    virtual void Foo(IFooable* pFooable) = 0; 
}; 

와 구을 모의 모의

class TMockFoo : public IFoo { 
    MOCK_METHOD1(Foo, void (IFooable*)); 
}; 

조롱 방법 Foo()의 인수에 Fooable()를 호출하는 작업을 지정하는 가장 쉬운 방법은 무엇입니까? 감안할 때

나는

TMockFoo MockFoo; 
ON_CALL(MockFoo, Foo(_)) 
    .WithArg<0>(Invoke(&IFooable::Fooable)); 

을 시도했지만 하나 개의 인수와 Invoke()은 무료 기능이 아닌 멤버 함수를 기대하기 때문에이 컴파일되지 않습니다.

boost::bind을 사용하면 코드가 너무 읽기 쉽습니다. 커스텀 Action을 작성하기 전에, 내가 완전히 명백한 것을 놓치고 있는지 확인하고 싶었습니다. 이 것 때문에

+0

* 아무도 모의하지 마십시오. 나쁜 습관 : P – Nawaz

답변

1

내가 할 수있는 쉬운 길을 찾지 못하고 마침내 해결했습니다.

TMockFoo MockFoo; 
ON_CALL(MockFoo, Foo(_)) 
    .WillByDefault(Invoke(boost::mem_fn(&IFooable::Fooable))); 
0

내가 구글 모의 설치하지 않는 한 나는 그것을 테스트 할 수 없습니다, 그러나 Invoke을 보인다는 두 개의 매개 변수, 오브젝트 및 메소드 포인터 다른 과부하가 있습니다

IFooable* ifooable = new IFooableImpl(...); 
TMockFoo MockFoo; 
ON_CALL(MockFoo, Foo(_)) 
    .WithArg<0>(Invoke(&ifooable,&IFooable::Fooable));