如何在没有实现的情况下测试纯虚拟类
How to test a pure-virtual class without implementation?
我有以下类:
// 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:在函数
MockController::~MockController()': test/input/InputManagerTest.cpp:19: undefined reference to
IVirtualController::~ IVirtualController((中'test/input/InputManagerTest.cpp:19:对`IVirtualController::~IVirtualController(('的未定义引用test/input/InputManagerTest.o:IVirtualController’的函数
IVirtualController::IVirtualController()': test/input/../../src/input/IVirtualController.hpp:14: undefined reference to
vtabletest/input/InputManagerTest.o:在函数
MockController::MockController()': test/input/InputManagerTest.cpp:15: undefined reference to
IVirtualController::~ IVirtualController(('中test/input/InputManagerTest.o:(.rodata._ZTI14MockController[_ZTI14MockController]+0x10(:对"IVirtualController的类型信息"的未定义引用
搜索告诉我,"对vtable/typeinfo的未定义引用"错误是由缺少实现、虚拟方法声明后面缺少"=0"或非虚拟析构函数引起的。类IVirtualController没有实现,但这应该不是问题,因为MockController正在实现它,对吧?注释掉整个InputManagerTest.cpp模拟文件"解决"了这个问题,即使IVirtualController在另一个类中使用。
我该如何测试它?
没有。析构函数必须始终实现。即使是纯虚拟的。
这是因为它的工作方式。应用于析构函数的virtual
使
virtual
方法在派生类中被重写,则不会调用该方法,但仍将调用virtual
析构函数,因此需要实现。
析构函数的=0
只使类抽象,但如前所述,仍然需要实现。
- 有没有办法在不使用 #ifdef 的情况下不编译发布版本中的单元测试函数体?
- 在单元测试中,如何在不使用 operator== 的情况下比较两个对象,这可能会错过新成员?
- 如何在不闪烁的情况下运行ESP32的单元测试
- 谷歌嘲笑!我的测试出错.默认情况下,呼叫将返回调用
- 在单元测试中测试连接丢失(在节俭的C++应用程序中或一般情况下)
- SuiteParse CHOLMOD在通过所有演示测试的情况下抛出gpu_memorysize错误
- C++ - 在没有物理设备的情况下测试串行端口
- Qt在没有x服务器的情况下测试控制台应用程序
- 任何地方都可以测试arduino在没有硬件的情况下能做什么
- 在没有朋友的情况下测试C++中的私有类成员
- 在没有测试用例的情况下提升单元测试框架
- 在不更改代码的情况下使用 .in 文件进行测试
- C++ - 如何在没有dynamic_cast<>的情况下测试工厂
- 如何在没有main的情况下初始化谷歌测试
- 在谷歌测试中,如何在断言失败的情况下进行拆卸
- 在没有硬件的情况下测试此功能的简单/创造性方法
- 是否可以在没有完全定义着色器的情况下测试缓冲区数据是否成功加载到GPU上?(C++、OpenGL 4.4、GLFW)
- 是否可以在不使用文件函数的情况下使用代码块从文件运行某些用例测试?
- C 的单元测试 - 如何在不重新编译/重新链接的情况下测试'unit'?
- 在这种情况下如何测试左值或右值