我有以下类(class):
// 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));
};
但这行不通! 我收到以下错误:
test/input/InputManagerTest.o: In function
MockController::~MockController()': test/input/InputManagerTest.cpp:19: undefined reference to
IVirtualController::~IVirtualController()' test/input/InputManagerTest.cpp:19: undefined reference to `IVirtualController::~IVirtualController()'test/input/InputManagerTest.o: In function
IVirtualController::IVirtualController()': test/input/../../src/input/IVirtualController.hpp:14: undefined reference to
vtable for IVirtualController'test/input/InputManagerTest.o: In function
MockController::MockController()': test/input/InputManagerTest.cpp:15: undefined reference to
IVirtualController::~IVirtualController()'test/input/InputManagerTest.o:(.rodata._ZTI14MockController[_ZTI14MockController]+0x10): undefined reference to `typeinfo for IVirtualController'
搜索告诉我,“对 vtable/typeinfo 的 undefined reference ”错误是由缺少实现、虚拟方法声明后面缺少“= 0”或非虚拟析构函数引起的。 IVirtualController 类没有实现,但这应该不是问题,因为 MockController 正在实现它,对吧?注释掉整个 InputManagerTest.cpp 模拟文件“解决”了这个问题,即使在另一个类中使用了 IVirtualController。
我如何测试它?
最佳答案
没有。析构函数必须始终实现。甚至是纯虚拟的。
那是因为它的工作原理。应用于析构函数的virtual
具有不同 的更多含义。通常,如果 virtual
方法在派生类中被重写,则不会调用它,但仍会调用 virtual
析构函数,因此需要实现。
析构函数的 =0
只会使类抽象,但是,如前所述,仍然需要实现。
关于c++ - 如何在没有实现的情况下测试纯虚拟类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15842961/