如何使用 gmock 来测试类是否调用其基类的方法
How to use gmock to test that a class calls it's base class' methods
class Foo {
public:
int x;
int y;
void move(void);
};
class SuperFoo: public Foo {
public:
int age;
void update();
};
SuperFoo::update(void) {
move();
age++;
}
我刚开始使用c++和单元测试,我有一些类似于上面的代码,我想使用gmock来测试SuperFoo::update()
调用基类的move()
方法。对付这种情况的最好办法是什么?
一种方法是使move
方法成为虚拟的,并创建一个类的模拟:
#include "gtest/gtest.h"
#include "gmock/gmock.h"
class Foo {
public:
int x;
int y;
virtual void move(void);
//^^^^ following works for virtual methods
};
// ...
class TestableSuperFoo : public SuperFoo
{
public:
TestableSuperFoo();
MOCK_METHOD0(move, void ());
void doMove()
{
SuperFoo::move();
}
};
然后在您的测试中,设置相应的调用期望
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);
}
相关文章:
- C++:在派生类成员上调用基类方法
- 在基类方法中调用不同类的方法
- 无法访问派生类中的基类方法
- 有没有办法禁止派生类中的基类方法调用?
- 给定基类方法的编译时重写
- 在派生类中调用基类方法,而无需指定基类名称
- 如何将基类方法超载作为参数传递到C 中的模板类
- 如何模拟调用其基类方法的派生类
- 当应该调用派生类方法时,为什么要调用基类方法
- 从基类方法返回对派生类的引用
- 无法从派生的一个方法调用基类方法
- 用受保护的继承指向基类方法
- 使用来自基类方法的派生类数据成员
- 传递指针或引用派生类,以便调用基类方法
- C++11可变参数模板方法完全影子基类方法
- 更改基类方法在其派生类中的返回类型
- std::异步不能调用受保护的基类方法
- 是否有希望在std::变体上高效地调用一个公共基类方法
- 有没有一种不太直截了当的方法将基类方法引入子类?
- 重新定义派生类中的基类方法