我有一个班级说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实际的方法实现?
答案 0 :(得分:0)
通常对于这种情况,您没有来自A
的模拟继承,而是使用编译时机制来选择是使用实现类还是模拟类。例如。模板化使用A
的所有内容,然后使用A
或MockA
实例化模板,将生产类替换为测试设置中的模拟类。任何未在mock中实现但被调用的方法都会导致编译时错误。即使方法是非虚拟的,模拟定义中宏的使用也几乎相同。
困难的部分是到处取代课程。模板,通过宏引用类名,或使用相同的类名,并确保只链接一个是可能的。