One way - to make the method move virtual and create a layout of your class:
#include "gtest/gtest.h" #include "gmock/gmock.h" class Foo { public: int x; int y; virtual void move(void);
Then, in your test, configure the appropriate call waiting
TEST(SuperFoo, TestUpdate) { TestableSuperFoo instance; // Setup expectations: // 1) number of times (Times(AtLeast(1)), or Times(1), or ... // 2) behavior: calling base class "move" (not just mock's) if "move" // has side-effects required by "update" EXPECT_CALL(instance, move()).Times(testing::AtLeast(1)) .WillRepeatedly(testing::InvokeWithoutArgs(&instance, &TestableSuperFoo::doMove)); const int someValue = 42; instance.age = someValue; // Act instance.update(); // Assert EXPECT_EQ(someValue+1, instance.age); }
source share