是否可以通过在单元测试中定义我自己的 PRIVATE 宏来使私有成员公开
Is it OK to make private member public by defining my own PRIVATE macro in unit test?
我确实需要测试C++类的私有成员方法。
由于它是私有方法,我不想将其更改为受保护,因此我无法通过创建子类并添加 using 声明来公开它。
因此,如果我定义一个宏 PRIVATE 来替换私钥。这是解决这个问题的好方法吗?
#if __UNITTEST__
#define PRIVATE public
#else
#define PRIVATE private
#endif
class A {
PRIVATE:
void f();
};
使用宏来更改C++关键字的含义是一个非常糟糕的主意。它不仅会让你的读者感到困惑,而且还会使你的代码受到来自善意的代码消费者的编译时滥用,他们可以通过定义预处理器符号来使类的私人成员对他们可见。
对私有成员函数进行单元测试的想法同样有害,因为单元测试会破坏实现的封装。
应该只对公共成员和受保护成员进行单元测试。另一方面,应通过调用公共和受保护的成员函数来间接测试私有成员,让私有成员函数保持其实现细节。
如果你绝对必须测试私有函数(我强烈建议不要这样做(,你可以将你的单元测试类声明为正在测试的类的friend
,授予其成员函数访问所需类的私有成员函数的权限。
相关文章:
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 对RValue对象调用的LValue ref限定成员函数
- 为什么使用 "this" 指针调用派生成员函数?
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- 助记符和指向成员语法的指针
- 用于访问容器<T>数据成员的正确 API
- 内置函数可查看CPP中的成员变量
- 是否可以初始化不可复制类型的成员变量(或基类)
- "class::data member is private"错误,但我正在使用成员函数对其进行操作?
- 是否可以通过在单元测试中定义我自己的 PRIVATE 宏来使私有成员公开
- 为什么即使将成员函数声明为 "private",仍然可以访问它?
- 为什么 PRIVATE 成员函数不能是另一个类的友元函数?
- 使用OpenGL将结构体加载到成员为Private的VBO中
- 为什么在使用类成员访问其他类的私有成员时出现"is private"错误?
- 在OOP中,Private成员对于谁是私有的
- 友元成员函数无法访问private成员
- C++。无法调用成员函数。错误 : "foo is private"
- 可以将基类的单个成员的状态更改为private吗?
- 模板友元函数无法访问private成员
- 可以将c++类的所有成员(包括数据和函数)定义为private吗?