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();
}
这篇关于如何模拟调用其基类方法的派生类?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:如何模拟调用其基类方法的派生类?
基础教程推荐
猜你喜欢
- C++ 标准:取消引用 NULL 指针以获取引用? 2021-01-01
- 设计字符串本地化的最佳方法 2022-01-01
- 运算符重载的基本规则和习语是什么? 2022-10-31
- 如何定义双括号/双迭代器运算符,类似于向量的向量? 2022-01-01
- C++,'if' 表达式中的变量声明 2021-01-01
- 调用std::Package_TASK::Get_Future()时可能出现争用情况 2022-12-17
- 什么是T&&(双与号)在 C++11 中是什么意思? 2022-11-04
- C++ 程序在执行 std::string 分配时总是崩溃 2022-01-01
- 如何在 C++ 中处理或避免堆栈溢出 2022-01-01
- 您如何将 CreateThread 用于属于类成员的函数? 2021-01-01