[英]Can I get away with not mocking all methods in an interface in C++ when using googlemock
我正在使用谷歌模拟1.6 RC,我正在尝试模拟COM Interface
。 COM接口中有近50种方法,其中一些方法是从基接口继承的。 当我创建一个继承自此接口的模拟struct
并仅模拟我正在使用的方法时,我得到了cannot instantiate abstract class
错误。
我想知道是否可以在googlemock中执行此操作。
这是不可能的。 您必须从所有接口(构造函数和析构函数除外)重载所有纯虚方法。
您必须覆盖从您直接或间接继承的类中声明为纯虚拟的每个方法。 有两个原因不想要全部覆盖它们:
(1)的修复是使用Google Mock scripts
目录中的gmock_gen.py
脚本。 它遍历类定义并将方法声明转换为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的宏编写模拟的原始接口,则此线程会发布一个脚本,将它们转换为gmock_gen.py
可接受的C ++。
我不完全确定是否应该在mock类中涵盖所有方法...在gmock示例中,您可以看到例如析构函数不会被模拟。 因此我认为没有必要嘲笑整个班级。
无论如何,你不应该创建模拟类而不是模拟结构吗?
但是,脚本/生成器中有一个gmock_gen.py工具,可以为您完成模拟大类的艰苦工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.