我正在使用Google Mock 1.6 RC,我正在尝试模拟COM Interface
。 COM接口中有近50种方法,其中一些方法是从基接口继承的。当我创建一个继承自此接口并仅模拟我正在使用的方法的模拟struct
时,我收到cannot instantiate abstract class
错误。
我想知道是否可以在googlemock中执行此操作。
答案 0 :(得分:2)
您必须覆盖从您直接或间接继承的类中声明为纯虚拟的每个方法。有两个原因不想要全部覆盖它们:
(1)的修正是使用Google Mock的gmock_gen.py
目录中的scripts
脚本。它遍历类定义并将方法声明转换为MOCK_METHOD
语句。如果您遇到(2)的问题,可以用存根替换不必要的MOCK_METHOD
语句:
MOCK_METHOD1(f, bool(int i));
与
virtual bool f(int i) {
thrown std::exception("The stub for f(int) has been invoked unexpectedly.");
}
抛出异常会提醒您调用特定存根的情况,这意味着您可能需要模拟它。
编辑:如果使用Microsoft的宏编写模拟的原始接口,this thread会发布一个脚本,将它们转换为gmock_gen.py
可接受的C ++。
答案 1 :(得分:1)
这是不可能的。您必须从所有接口(构造函数和析构函数除外)重载所有纯虚方法。
答案 2 :(得分:0)
我不完全确定是否应该在mock类中涵盖所有方法...在gmock示例中,您可以看到例如析构函数未被模拟。因此,我认为没有必要嘲笑整个班级。
无论如何,你不应该创建mock类而不是mock struct吗?
但是,脚本/生成器中有一个gmock_gen.py工具,可以为您模拟大型类的工作。