如何模拟调用其基类方法的派生类?

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();
}

这篇关于如何模拟调用其基类方法的派生类?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本文标题为:如何模拟调用其基类方法的派生类?