GMock:必须始终是纯虚拟的模拟类的基类吗?

时间:2013-11-26 19:52:16

标签: c++ gmock

我已经阅读了关于googlecode的良好做法。他们是对的,但我仍然对以下内容感到好奇:

有一些类定义,让我们说:

class A{
   virtual void method_a(){}
};

正如您所看到的, method_a 不是纯粹的虚拟

我可以编码吗

class MockA: public A{
    MOCK_METHOD(method_a, void());
};

没有黑暗的结果?

更进一步。我可以覆盖 MockA 中的 method_a 吗?

像:

class MockA: public A{
    void method_a(){
        // Do something here.
    }
};

1 个答案:

答案 0 :(得分:3)

嗯,我刚做了一个测试,似乎我们可以。我正在使用这种方法来测试一些具有10个以上参数的类函数。

根据Simplifying the Interface without Breaking Existing Code。来自gmock食谱。

例如:

class SomeClass {
     ...
     virtual void bad_designed_func(int a, ...){ // This functions has up to 12 parameters.
                                                 // The others were omitted for simplicity.
};


class MockSomeClass: public SomeClass {
    ...
    void bad_designed_func(int a, ...){ // This functions recives 12 parameters.
                                        // The others were omitted for simplicity.
        ...   
        test_wat_i_want(a);  // Mock method call. I'm only interest in paramater a.
    }

    MOCK_METHOD1(test_wat_i_want, void(int a));
};

在我的代码中,我没有任何抽象类(意味着根本没有纯虚函数)。 这不是推荐的方法,但有助于我们处理遗留代码。