我已经阅读了关于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.
}
};
答案 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));
};
在我的代码中,我没有任何抽象类(意味着根本没有纯虚函数)。 这不是推荐的方法,但有助于我们处理遗留代码。