c++ - How to solve this Object Slicing issue with GoogleMock -
below 1 of line in method. here have mock method "findchild" , make "chino::mock_button" instance assigned "close_button". requirement.
chino::button* close_button = findchild<chino::button>("closebutton");
methods tried:
since findchild template, can't mock it. changed implementation of findchild template specialize chino::button type , mock new function "getchinobuttoninstance(qstring,bool)" , make return chino::mock_button instance rather chino::button instance.
template<> inline chino::button* mediator::findchild<chino::button>(const qstring &name, bool recursive) { return getchinobuttoninstance(name,recursive); }
then, in unittestclass have mocked "getchinobuttoninstance".
mock_method2(getchinobuttoninstance,chino::mock_button*(qstring,bool));
and expect_call :
expect_call(*wlighting,getchinobuttoninstance("a",true)).times(testing::atleast(1)).willonce(testing::returnpointee(&wlighting->sourcebuttonmock));
here instead of returnpointee, have tried return , returnref. in cases findchild assigns "close_button" nullptr.
- second method:
we have separate store class created. put , values.here before calling findchild method, storing chino::mockbutton instance in store class. findchild class modified :
template<> inline chino::button* mediator::findchild<chino::button>(const qstring &name, bool recursive) { harmanuteststore *store=harmanuteststore::instance(); chino::mock_button *val=dynamic_cast<chino::mock_button*>(store->getmockinstance()); return val; }
here problem object slicing. can see debugger showing "chino::mockbutton" instance being returned when "store->getmockinstance()" called. not sure problem is, debugger not showing value of "val" , directly stepping findchild statement , having object of chino::button instance assigned "close_button" instead of chino::mockbutton instance. sure problem object slicing dont know how solve issue.
i doing wrong casting in second approach.
chino::button *val=static_cast<chino::mock_button*>(store->get(key_chino_close_button_instance));
this fixed issue.
Comments
Post a Comment