如何从void*测试类
How to test class from void*
假设以下API:
CClassA(const CClassA& inCCA);
CClassA(void *inData);
我们如何确保没有人使用指向CClassA
对象的指针来调用void*构造函数,即检测诸如CClassA *instance; new CClassA(instance)
之类的调用?
我想在(void)构造函数中检查 - 并丢弃错误 - 如果API使用不正确,但是dynamic_cast
在原始void*上不起作用,因为编译器(至少Clang确实)抱怨:
'void不是类'
测试if (dynamic_cast<CClassA*>(inData) != NULL)
。
以下编译 - 但是它是否有意义,即它是一个有效且正确的构造,并且在运行时始终正确评估。?
if (dynamic_cast<CClassA*>( (CClassA*)inData ) != NULL)
添加一个私有构造函数:
private:
CClassA(CClassA *forbidden);
您将无法编译:
error: calling a private constructor of class 'CClassA'
CClassA *instance; new CClassA(instance);
编辑:
由于您提到了C 11标签,因此可以将其删除:
CClassA(CClassA *forbidden) = delete;
这触发了不同的编译时间错误:
error: call to deleted constructor of 'CClassA'
CClassA *instance; new CClassA(instance);
^ ~~~~~~~~
note: 'CClassA' has been explicitly marked deleted here
CClassA(CClassA *) = delete;
相关文章:
- 使用gtest时,在头文件中而不是.cpp文件中具有可测试类的利弊
- googlemock-如何模拟被测试类所拥有的对象
- 单元测试类无法在我要测试的同一解决方案中的另一个项目中找到类
- gmock EXPECT_CALL 不会在测试类中调用该方法
- 使用专业化来测试类中值的存在
- 在C 中,是否有一种(新的)方法来测试类是否在模板中具有虚拟破坏者而无需实例化实例
- Boost单元测试夹具继承测试类,是否可以访问受保护的方法
- 如何从void*测试类
- 如何测试类B是否派生自类的模板族
- 如何通过SFINAE测试类中是否存在内部类
- C++预处理器测试类成员是否存在
- 访问提升测试类 - test_results和results_collector
- 试图用C++构造简单的测试类
- C++单元测试测试,使用模板测试类
- 如何使用 gmock 来测试类是否调用其基类的方法
- 使用 libtool 测试类是否可复制可构造
- 虚函数和多态——无法在测试类中声明对象
- 如何根据头文件中定义的代码测试类
- 如何生成在被测试类中创建的模拟对象
- 如何编写一个通用函数回调测试类