模拟非虚拟的方法

时间:2017-11-29 06:17:30

标签: c++ c++11 gmock

我有一个班级说A如下所述:

class A
{
void show()
{}
int data(int x)
{}
.....
};

我需要模拟这个类 - 因为成员函数不是虚拟的 - 我可以设计我的模拟类,如下所述:

class MockA : public A
{
MOCK_METHIOD0(show, void ());
MOCK_METHIOD1(data, int (int));
}

我可以实现这种方式吗?MockA有机会错过嘲笑 A级的任何功能? 使用MockA创建的对象无论如何都会调用类A实际的方法实现?

1 个答案:

答案 0 :(得分:0)

通常对于这种情况,您没有来自A的模拟继承,而是使用编译时机制来选择是使用实现类还是模拟类。例如。模板化使用A的所有内容,然后使用AMockA实例化模板,将生产类替换为测试设置中的模拟类。任何未在mock中实现但被调用的方法都会导致编译时错误。即使方法是非虚拟的,模拟定义中宏的使用也几乎相同。

困难的部分是到处取代课程。模板,通过宏引用类名,或使用相同的类名,并确保只链接一个是可能的。