2017-10-11 1 views
0

내가 테스트를 조롱에 문제가, 아래에있는 내 코드입니다 :도발의 간단한 C++ 방법은 googletest 사용에 실패

/gmock-1.7.0/fused-src/gmock/gmock.h:11572:16: error: no matching function for call to 'MockSocket::MockSocket()' 
    StrictMock() { 
: 위의 코드를 실행하는 동안

struct Interface 
{ 
virtual ~Interface() {}; 
virtual struct group *read() { 
    return ::read(); 
} 
}; 


class MockSocket: public Socket::Interface 
{ 
public: 
    MOCK_METHOD0(read, struct group *()); 
}; 

TEST_F(ConfiguredGrent, ReceivedcorrectStructure) 
{ 
    StrictMock<MockSocket> ms; 
    struct group value; 

    EXPECT_CALL(ms, read()).Times(1). 
    WillOnce(Return(&value)). 
    RetiresOnSaturation(); 
} 

, 그것은 아래의 오류와 함께 실패

하나를 제안 해주세요 어디에서 잘못 생각 해요

+0

끝에 닫는 중괄호가 누락되어 있지 않습니까? –

+0

'Interface'와'Socket :: Interface'는 같은 것입니까? –

+0

닫는 대괄호가 있고 예 모두 똑같습니다. – Shilpa

답변

2

귀하의 예는 오류를 생성하는 코드와 다르다는 것을 알려드립니다. 우리는 최소한의 예제를 만들 때 흥미로운 부분을 제거 할 수있었습니다. 여기

는 오류 생성 할 수 있습니다 무엇을 : 나는 다른 생성자를 추가하여 기본 생성자를 제거한

struct group{ 
}; 

struct Interface 
{ 
    virtual ~Interface() {}; 
    virtual struct group *read() { 
    return nullptr; // I added some dummy implementation instead of calling ::read but kept the interface non-pure virtual to keep it relevant 
    } 
}; 

class MockSocket: public Interface 
{ 
public: 
    MockSocket(int x){ (void) x; } 
    MOCK_METHOD0(read, struct group *()); 
}; 

TEST(ConfiguredGrent, ReceivedcorrectStructure) 
{ 
    StrictMock<MockSocket> ms; 
    struct group value; 

    EXPECT_CALL(ms, read()) 
    .Times(1) 
    .WillOnce(Return(&value)) 
    .RetiresOnSaturation(); 
} 

을, 여기에서 생산 된 오류입니다 :

error: no matching function for call to 'MockSocket::MockSocket()' 
    StrictMock() { 
       ^
note: candidate: MockSocket::MockSocket(int) 
    MockSocket(int x){ (void) x; } 
^

때문에 StrictMock<MockSocket> ms;은 기본 생성자 ID를 호출합니다.

관련 문제