我有以下类:如何在没有实现的情况下测试纯虚拟类?
// IVirtualController.hpp
class IVirtualController
{
public:
virtual InputCode validate(int keycode) = 0;
virtual ~IVirtualController();
};
,现在我想嘲笑这个类:
// InputManagerTest.cpp
class MockController : public IVirtualController
{
public:
MOCK_METHOD1(validate,InputCode(int keycode));
};
但是,这并不工作! 我得到以下错误:
测试/输入/ InputManagerTest.o:在功能
MockController::~MockController()': test/input/InputManagerTest.cpp:19: undefined reference to
IVirtualController ::〜IVirtualController()” 测试/输入/ InputManagerTest.cpp:19:未定义参考`IVirtualController :: 〜IVirtualController() '测试/输入/ InputManagerTest.o:在功能
IVirtualController::IVirtualController()': test/input/../../src/input/IVirtualController.hpp:14: undefined reference to
虚函数表为IVirtualController'测试/输入/ InputManagerTest.o:在功能
MockController::MockController()': test/input/InputManagerTest.cpp:15: undefined reference to
IVirtualController ::〜IVirtualController()”测试/输入/ InputManagerTest.o :(rodata._ZTI14MockController [_ZTI14MockController] + 0×10):未定义参考`所属类别为IVirtualController”
甲搜索告诉我 “未定义参考V表/所属类别”错误是由缺少的实现引起的,虚拟方法声明后面缺少“= 0”或非虚拟析构函数。 类IVirtualController没有实现,但这应该不是一个问题,因为MockController正在实现它,对吧?注释掉整个InputManagerTest.cpp模拟文件“解决”问题,即使IVirtualController用于另一个类中。
我该如何测试?
虚拟for dtors没有不同的含义,只是dtors隐式调用子对象的dtors。 – PlasmaHH 2013-04-05 20:37:20
@PlasmaHH是的,我猜它有一些意义,但也增加了一些。 – 2013-04-05 20:49:50