我确实需要测试一个C++类的私有成员方法.
由于它是私有方法,我不想将其更改为受保护,我不能通过创建子类并使用声明添加它来公开.
因此,如果我定义一个宏来替换私有关键字.这是解决这个问题的好方法吗?
#if __UNITTEST__
#define PRIVATE public
#else
#define PRIVATE private
#endif
class A {
PRIVATE:
void f();
};
Run Code Online (Sandbox Code Playgroud)
使用宏来改变C++关键字的含义是一个非常糟糕的主意.它不仅会使您的读者感到困惑,而且还会打开您的代码,以便从代码的善意消费者那里编译时滥用,只需定义预处理器符号,即可让您的类的私有成员对其可见.
单元测试私有成员函数的想法同样有害,因为您的单元测试会破坏您的实现的封装.
一个人应该只测试公共和受保护成员.另一方面,私有成员应通过调用公共成员和受保护的成员函数间接测试,让私有成员函数保持其实现细节.
如果你绝对必须测试私有函数(我强烈建议反对),你可以声明你friend正在测试的类的单元测试类a ,授予它的成员函数访问所需类的私有成员函数.
| 归档时间: |
|
| 查看次数: |
183 次 |
| 最近记录: |