Angenommen, wir haben eine Cat-Klasse. Je nach Parametern Energie wird eine show_cat
Funktion aufgerufen:Wie zu testen, ob die richtige Methode von Methode der gleichen Klasse aufgerufen wird C++ gmock
class Cat{
public:
int energy;
virtual void show_cat()
{
if(energy < 10)
{
show_tired_cat();
}
else
{
show_energized_cat();
}
}
virtual void show_tired_cat(){}
virtual void show_energized_cat(){}
};
Wie können wir testen, ob die richtige Show-Funktion gmock genannt wird?
Das folgende ist natürlich falsch, aber es gibt Ihnen eine Struktur für das Geben Sie mit spielen können:
#include<gmock/gmock.h>
#include<gtest/gtest.h>
class MockCat: public Cat
{
public:
MOCK_METHOD0(show_tired_cat,void());
MOCK_METHOD0(show_energized_cat,void());
};
TEST (catTest, show_cat){
//This is of course not working
Cat realCat;
realCat.energy = 3;
realCat.show_cat();
MockCat fakeCat;
EXPECT_CALL(fakeCat,show_tired_cat()).Times(1);
EXPECT_CALL(fakeCat,show_energized_cat()).Times(0);
}
int main(int argc, char *argv[])
{
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
Wenn Sie unten auf die Frage abstimmen, dann bitte kommentieren, warum Sie dies tun, so dass ich kann verbessern.
Sollte 'fake.show_cat()' nach dem Einrichten der Erwartungen nicht aufgerufen werden? – user0042
Auch der Aufruf von 'fakeCat.show_cat();' nach dem Einrichten der Erwartung ändert nichts, weil es wieder die 'show_cat-Methode' von 'realCat' aufrufen wird, was die 'show_tired_cat'-Methode von' realCat' aufrufen wird. – newandlost