2015-01-28 1 views
1

클래스 A에서 메서드 "methodToTest"를 테스트하고 싶습니다.Google 테스트에서 std :: function을 사용하여 메소드를 테스트하는 방법은 무엇입니까?

typedef std :: function F_global;

struct A 
{ 
    F_global m_F_global; 

    A(F_global m_F_global) : p_F_global(m_F_global) {} 

    void methodToTest() 
    { 
     m_F_global(5); 
    } 
}; 

나는 모의 클래스를 가지고있다 :

클래스 RunMock { 공개 : MOCK_METHOD1 (실행, 무효 (INT)); };

class TestClass : public testing::Test 
{ 
protected: 
    void SetUp(); 

    std::unique_ptr<A> m_aa; 
    std::unique_ptr<RunMock> m_runMock; 
}; 

void UecSimplePortTestSuite::SetUp() 
{ 
    m_aa = make_unique<A>(m_runMock->run);//IT DOESN'T WORK I DON'T KNOW HOW TO FORWARD A METHOD run from RunMock to constructor 
} 

TEST_F(UecSimplePortTestSuite, testForwardMessage) 
{ 
    EXPECT_CALL(*m_runMock, run(_)); 
    m_aa->methodToTest(); 
} 

은 일반적으로 내가에서 모의 ​​클래스 "RunMock"에서 방법 "실행"을 전송하는 방법을 모른다 "UecSimplePortTestSuite :: 설정()"나는 테스트 케이스를 가지고 아래

. 내가 "EXPECT_CALL (* m_runMock, run (_));"을 원합니다. UecSimplePortTestSuite.testForwardMessage에서 "methodToTest()"를 테스트하십시오. 좋은 생각은 lmbda, std :: boost :: bind 또는 이와 비슷한 것을 사용할 수 있다고 생각합니다.

m_runMock->run 

무엇을 당신에게 일을하지 않을, 그리고 그것은이다 : 이것은

m_runMock.reset(new RunMock); 
m_aa.reset(new A([&](int value){ m_runMock->run(value); }); 

:

답변

0

당신은 SetUp()A의 생성자에 람다를 전달할 수 있습니다 컴파일 오류. this parashift QAhere 멤버 함수에 대한 포인터 사용 방법을 읽을 수 있습니다.

+0

감사합니다. 그것은 작동합니다. –

관련 문제