如何在彼此调用时在同一个类中gmock函数

时间:2013-08-16 07:22:44

标签: c++ gmock

假设情况如此:

class base()
{
   virtual func1()=0;
   virtual func2()=0;
   virtual func3()=0;
}
class Inheritance:public base
{
   virtual func1(){ func2(); func3() };
   virtual func2(){ /* do something */ };
   virtual func3(){ /* do something */ };
}

现在我想单元测试func1(),并模拟func2()和func3();

因此可以模拟func2()和func3(),而func1()知道调用mock-func2()和mock-func3()而不调用真正的func2()和func3()?

顺便说一句,我使用Class Factory来初始化类,所以真实案例可能会更复杂一些

感谢〜

1 个答案:

答案 0 :(得分:1)

绝对有可能做你所描述的,但它并不漂亮。一种方法是让mock从具体类而不是接口派生,并创建mock的子类,它将根据某些配置成员将方法调用分派给适当的超类。例如:

// class MockBase inherits from BaseImpl, which in turn inherits from
// the 'base' interface
class Dispatch : public MockBase {
public:
    void func1() {
        return useMockFunc1 ? MockBase::func1() : BaseImpl::func1();
    }

    bool useMockFunc1;
};

然而,这还需要另一个类,强制你的模拟继承了具体的实现而不是接口,这会让大多数程序员想要用勺子挖出他们的眼睛。可能值得回顾一下你正在测试的类的设计,特别是寻找将它分解为单独对象的方法,而不是使用这种憎恶,每个对象都可以单独模拟。