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();
}
这篇关于如何模拟调用其基类方法的派生类?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:如何模拟调用其基类方法的派生类?
猜你喜欢
- 哪个更快:if (bool) 或 if(int)? 2022-01-01
- 从父 CMakeLists.txt 覆盖 CMake 中的默认选项(...)值 2021-01-01
- OpenGL 对象的 RAII 包装器 2021-01-01
- GDB 不显示函数名 2022-01-01
- 将函数的返回值分配给引用 C++? 2022-01-01
- DoEvents 等效于 C++? 2021-01-01
- 使用 __stdcall & 调用 DLLVS2013 中的 GetProcAddress() 2021-01-01
- 将 hdc 内容复制到位图 2022-09-04
- XML Schema 到 C++ 类 2022-01-01
- 如何提取 __VA_ARGS__? 2022-01-01