class TurtleChild: Turtle {
public:
void PenUp()
{
int a = 0;
};
void PenDown()
{
int b = 0;
};
};
class MockTurtleChild : public TurtleChild {
public:
MOCK_METHOD0(PenUp, void());
MOCK_METHOD0(PenDown, void());
};
class PainterChildRef
{
TurtleChild turtle;
public:
PainterChildRef(TurtleChild& turtle)
: turtle(turtle) {}
bool DrawCircle(int, int, int) {
turtle.PenDown();
return true;
}
};
TEST(PainterTest, ChildCanDrawSomething) {
MockTurtleChild turtle;
EXPECT_CALL(turtle, PenDown())
.Times(AtLeast(1));
PainterChild painter(&turtle);
EXPECT_TRUE(painter.DrawCircle(0, 0, 10));
}
结果3:
结论三:
测试用例通过,派生类中的同名函数仍然是虚函数,同样支持多态,支持gomck
场景4:
class Turtle {
public:
virtual ~Turtle() {}
virtual void PenUp() = 0;
virtual void PenDown() = 0;
};
class TurtleChild: Turtle {
public:
void PenUp()
{
int a = 0;
};
void PenDown()
{
int b = 0;
};
};
class MockTurtleChild : public TurtleChild {
public:
MOCK_METHOD0(PenUp, void());
MOCK_METHOD0(PenDown, void());
};
class PainterChildRef
{
TurtleChild turtle;
public:
PainterChildRef(TurtleChild& turtle)
: turtle(turtle) {}
bool DrawCircle(int, int, int) {
turtle.PenDown();
return true;
}
};
TEST(PainterTest, ChildRefCanDrawSomething) {
MockTurtleChild turtle;
EXPECT_CALL(turtle, PenDown())
.Times(AtLeast(1));
PainterChildRef painter(turtle);
EXPECT_TRUE(painter.DrawCircle(0, 0, 10));
}
结果4:











