我正在使用 Google Mock 1.6 RC 并试图模拟COM Interface
. COM 接口中有近 50 种方法,其中一些是从基本接口继承而来的。当我创建一个struct
从该接口继承的模拟并仅模拟我正在使用的方法时,我得到了cannot instantiate abstract class
错误。
我想知道是否可以在 googlemock 中执行此操作。
我正在使用 Google Mock 1.6 RC 并试图模拟COM Interface
. COM 接口中有近 50 种方法,其中一些是从基本接口继承而来的。当我创建一个struct
从该接口继承的模拟并仅模拟我正在使用的方法时,我得到了cannot instantiate abstract class
错误。
我想知道是否可以在 googlemock 中执行此操作。
这是不可能的。您必须从所有接口重载所有纯虚拟方法(构造函数和析构函数除外)。
您必须直接或间接地覆盖您继承的类中已声明为纯虚拟的每个方法。不想全部覆盖它们有两个原因:
(1) 的修复方法是使用gmock_gen.py
Google Mockscripts
目录中的脚本。它遍历类定义并将方法声明转换为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
.
我不完全确定是否所有方法都应该包含在模拟类中......在 gmock 示例中,您可以看到例如析构函数没有被模拟。因此,我认为没有必要模拟整个班级。
无论如何,您不应该创建模拟类而不是模拟结构吗?
但是,脚本/生成器中有一个 gmock_gen.py 工具,它应该为您完成模拟大型类的艰苦工作。