How to mock a derived class that calls its base class methods?(如何模拟调用其基类方法的派生类?)
本文介绍了如何模拟调用其基类方法的派生类?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在对派生类进行单元测试,希望EXPECT_CALL
调用属于其基类的某个方法。
例如:
class Base {
public:
void move(int x, int y);
};
class Derived: public Base{
public:
RESULT update();
private:
int age;
};
HRESULT Derived::update(void) {
int param1 = 5, param2 = 10;
move(param1, param2);
age++;
return SUCCESS;
}
我不能只为派生的和期望的move
创建模拟,因为没有依赖项,并且将调用实际的move()。
我如何才能模拟move()
?我的最终目标是需要使用正确的参数值(在本例中为param1 and param2
)来调用Move()。
当然,这不是实际代码,而只是一个表示
我知道就UT而言,这不是一个好的设计,但这是为了测试一些我不允许重新格式化(但需要进行UT)的遗留代码。因此,能够模拟和测试Move()是我真正拥有的最佳选择。
我们将非常感谢您的帮助。谢谢!
推荐答案
我认为没有任何方法不使用一些预处理技巧。在这些技巧中,当测试时使方法虚拟应该是最不痛苦的。 这样做就足够了:
#if UNDER_TEST
#define TEST_VIRTUAL virtual
#else
#define TEST_VIRTUAL
#endif
class Base {
public:
TEST_VIRTUAL void move(int x, int y);
};
然后您可以这样模拟它:
class TestObject : public Derived {
public:
MOCK_METHOD2(move, void(int x, int y));
};
TEST(Test, Testing)
{
TestObject obj;
EXPECT_CALL(obj, move(5, 10));
obj.update();
}
这篇关于如何模拟调用其基类方法的派生类?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
织梦狗教程
本文标题为:如何模拟调用其基类方法的派生类?
基础教程推荐
猜你喜欢
- 初始化列表*参数*评估顺序 2021-01-01
- CString 到 char* 2021-01-01
- 我应该对 C++ 中的成员变量和函数参数使用相同的名称吗? 2021-01-01
- 非静态 const 成员,不能使用默认赋值运算符 2022-10-09
- 通过引用传递 C++ 迭代器有什么问题? 2022-01-01
- 为什么派生模板类不能访问基模板类的标识符? 2021-01-01
- 为什么 RegOpenKeyEx() 在 Vista 64 位上返回错误代码 2021-01-01
- 为什么 typeid.name() 使用 GCC 返回奇怪的字符以及如 2022-09-16
- 如果我为无符号变量分配负值会发生什么? 2022-01-01
- GDB 显示调用堆栈上函数地址的当前编译二进制文 2022-09-05