2017-06-12 2 views
0

Ich möchte Verweise auf die MyObjectClass-Instanz abrufen, die an "somePrivateMethod" übergeben wird und von myMock aufgerufen wird.So erhalten Sie einen Verweis auf das EXPECT_CALL-Argument

Jetzt benutze ich das folgende Snippet, aber ich bin sicher, dass es einen besseren Weg gibt.

namespace { 
MyObjectClass *myObjectPtr; 

ACTION(getIt) 
{ 
    myObjectPtr = &arg0; 
} 
} 
... 

... 

EXPECT_CALL(*myMock, somePrivateMethod(testing::_)).WillOnce(testing::WithArg<0>(getIt())); 

Mein Problem ist klar angegeben, ich muss den Verweis auf dieses Argument erhalten. Der Grund für das, was ich will, ist hier egal. Ich muss nur wissen, wie man einen Zeiger auf das Argument von somePrivateMethod setzt.

+1

Ihr Code sollte Klasse Verhalten nicht seine interne Implementierung testen. Auch die Frage wird so schlecht ausgedrückt, dass es schwer ist, es zu verstehen. Also vermute ich [XY-Problem] (http://xyproblem.info/). –

+0

Ich möchte es nicht testen. Ich brauche Zugriff auf das private Mitglied in diesem Fall b, aber es kann jedes Objekt sein. Mock benutze dieses Objekt als Argument. Ich versuche, SaveArg, SaveArgPointee zu verwenden, aber sie kopieren nur Wert. – pZCZ

+0

Wenn Sie es nicht testen wollen, warum verwenden Sie 'gtest' und' gmock'? –

Antwort

0

Einer der Weg, dies zu tun ist, schreiben öffentliche get Methode in Erklärung class A

public: const int * get_b { return &b; }

Aber da Sie den Wert dieser Variablen überprüfen möchten Sie nicht über einen Zeiger benötigen und können zurückkehren Wert der variablen in get Funktion

public: int get_b { return b; }

+0

Ich kann den Code nicht ändern, ich brauche Zugriff auf das private Objekt, das als Argument der Funktion verwendet wird, die verspottet wird. – pZCZ

+0

Da Sie den Code nicht ändern können, können Sie keinen Zugriff auf private Mitglieder der Klasse A erhalten. Nur Klassenmethoden und "Freund" -Funktionen können auf private Mitglieder zugreifen. –

Verwandte Themen