C++11 扩展 friend 关键字特性后对于单元测试的改进

简述

所谓单元测试,就是针对于函数粒度的单元进行测试。由于 c++ 良好的封装性,这就导致c++ 单元测试向来是个比较令人纠结的选择:需要对于对象的私有成员进行单元测试,则必须具有私有成员的访问权限。这就引出两种方式:

  • 测试时更改被测试对象的成员的属性
  • 将测试对象设置为被测试对象的友元

更改成员属性

更改成员属性是利用 #define 的替换作用,将对象成员的可见权限关键字 private 替换为 public 关键字,这样做有以下几个坏处:

  1. 应为 class 对象成员默认为 private,则此法不能影响默认为 private 的成员
  2. 对关键字做替换,是非常不推荐的方法。
  3. 如此操作,对于程序的优雅性严重影响

利用 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 才能支持的)

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,314评论 19 139
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 13,848评论 6 13
  • 一、活得现实点儿就是比过于高尚强 今天比我大六岁的一位男士跟我说,你居然已经把社会看透了!? 其实不是的,我只是过...
    泡桐姑娘阅读 4,247评论 0 0
  • 我在春风里萌芽期许, 如同原野中的小草般把舞蹈忙碌。 此时的欢快, 似轻烟如薄雾。 在夏季里浓妆艳抹, 花着大把的...
    茶朵张涵阅读 1,157评论 0 1
  • 抛开前路的迷惘 未知 何尝不是 另一种希望 充满变数的前路 或许 何尝不是 另一种抉择 没有可惜 微笑着学会放弃 ...
    夜猫爱潘潘阅读 2,144评论 4 2