2017-10-11 5 views
0

J'ai un problème avec moqueur test, ci-dessous est mon code:Mocking fémi ++ méthode échoue sur l'utilisation googletest

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(); 
} 

lors de l'exécution du code ci-dessus, il échoue avec l'erreur ci-dessous:

/gmock-1.7.0/fused-src/gmock/gmock.h:11572:16: error: no matching function for call to 'MockSocket::MockSocket()' 
    StrictMock() { 

S'il vous plaît quelqu'un peut suggérer, où je me trompe

+0

Vous ne manquez pas un support de fermeture à la fin? –

+0

Est-ce que 'Interface' et' Socket :: Interface' sont la même chose? –

+0

Il y a une parenthèse de fermeture et oui les deux sont la même chose – Shilpa

Répondre

2

Votre exemple n'est pas le même que le code produisant l'erreur. Vous avez réussi à supprimer la partie intéressante lorsque vous créez un exemple minimal pour nous.

Voici ce qui peut produire votre erreur:

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(); 
} 

J'ai supprimé le constructeur par défaut en ajoutant un constructeur différent, et voici l'erreur produite:

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

Parce que

StrictMock<MockSocket> ms; appellera l'identité du constructeur par défaut.