Witam
Czy ktoś wie czy da radę tutaj jakoś zamokowac metodę lokalnego obiektu? Chciałbym zrobić na niej EXPECT_CALLa (sprawdzać czy się wywołuje). Czy jedyne wyjście to rezygnacja z lokalnej zmiennej 'driver' i stworzenie pola klasy -> w tym wypadku dalej to już łatwo zamokować metodę i wykonac EXPECT_CALLa. Ale pytanie czy da się jakoś nie zmieniac implementacji kodu źródłowego - nie lubię jak na potrzeby unit testów muszę zmieniać implementacje klasy bo naprawde ten obiekt nie jest mi do szczęścia potrzebny w ciele klasy. Ale jednocześnie chciałbym sprawdzić w teście czy metoda się wywołuje. Czy poza ifdefami da się cos tu zdziałać?
class KlasaGlowna
{
public:
KlasaGlowna();
virtual ~KlasaGlowna();
protected:
virtual Subclass getDriver();
};
void KlasaGlowna::TestowanaMetoda()
{
Subclass driver = getDriver();
try
{
driver.metodaNaKtorejExpectCallaRobimyBySprCzySieWywoluje();
.....
}
catch(..)
{
....
}
}
Subclass KlasaGlowna::getDriver() //taka implementacja 'Subclass& KlasaGlowna::getDriver()' nie rpzejdzie bo nie mozna zwrocić referencji do tymczasowego obiektu
{
return Subclass();
}
Kombinowałem ze stworzeniem dodatkowej metody 'getDriver()' dla której planowałem w mocku klasy zrobić nowa implementację i zwracać mocka klasy Subclass, ale nie przechochodzi test z wiadomych względów.