简述
所谓单元测试,就是针对于函数粒度的单元进行测试。由于 c++ 良好的封装性,这就导致c++ 单元测试向来是个比较令人纠结的选择:需要对于对象的私有成员进行单元测试,则必须具有私有成员的访问权限。这就引出两种方式:
- 测试时更改被测试对象的成员的属性
- 将测试对象设置为被测试对象的友元
更改成员属性
更改成员属性是利用 #define
的替换作用,将对象成员的可见权限关键字 private
替换为 public
关键字,这样做有以下几个坏处:
- 应为 class 对象成员默认为 private,则此法不能影响默认为 private 的成员
- 对关键字做替换,是非常不推荐的方法。
- 如此操作,对于程序的优雅性严重影响
利用 friend
将测试对象声明为被测试对象的友元,从而使得测试对象获得被测对象全部成员的访问权限。
class P;
template <typename T> class People{
friend T;
}
People< P > pp ; //类 P 是这里 People 对象的友元
People< int > pi; //对于 int 类型的模板参数,友元声明被忽略。
由 friend
的以上特性,可以看出,即可使 测试类 P 获得 PP 成员的访问权限,当正式使用 People的时候 可以使用 People<int> 从而使得友元声明 被忽略。(此特性使 c++11 才能支持的)