解决C++代码单元测试中的难题-不可验证和IO调用

原帖发表在Hadoop技术论坛

在做C++程序的单元测试时,大家经常会遇到两个问题:

1.不方便验证测试结果,原因是因为不可访问保护和私有类成员

2.对于需要访问的connect、receive、send等不好绕过

这里介绍两种方法,即可解决:

1.在编译单元测试代码时,加上UNIT_TEST宏(名字可以为其它你喜欢的),并将private定义成public,即:

#define private public

这样就可以测试代码就可以随意访问类的任何成员了,单元测试就是要做白盒测试,将内部看得清清楚楚

以前喜欢使用友元类的方式,但那需要在代码中安插测试代码,所以这个办法更好。

2.对于IO问题,只需要从被测试再继承一下,然后重实现(如果为虚拟,则为隐藏)相应的方法,改成方便验证的,这样问题也就好解决了。设计模式中的Decorator模式用在这里非常合适。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏有刻

Docker 小记 — MySQL 与 Redis 配置

49170
来自专栏朱彬峰的专栏

腾讯云公网负载均衡技术实现详解

本文主要讲述了腾讯云CLB的基本概念,业务架构以及公网LB技术实现。

6.3K50
来自专栏大魏分享(微信公众号:david-share)

Openshift3.9高可用部署考虑点1

一个典型的OCP高可用架构是:master至少应为三个,且为奇数个(上面有etcd);

31140
来自专栏逸鹏说道

Hyper-V:无法打开虚拟机XXX,因为虚拟机监控程序未运行

异常处理汇总-服务器系列:http://www.cnblogs.com/dunitian/p/4522983.html 异常处理汇总-开发工具 http://...

76060
来自专栏JAVA高级架构

一个分布式服务器集群架构方案

67220
来自专栏听雨堂

用AutoHotKey建立自己的便签本

     如果要我选一个我最常用的windows程序,那一定是notepad了,事实上,我把它的快捷方法放到快速启动栏以便随时打开它。顺手记录各种东西:网址,关...

23980
来自专栏机器学习算法与Python学习

Ubuntu 19.04 每日创建版本已经提供下载

Ubuntu 19.04 代号已经发布,发布日期也已提上日程,现在可以下载Ubuntu 19.04每日创建版本了。

14240
来自专栏无题

mongoDB运作原理与分片实现

觉得这一篇整理比较好,主要在于通俗易懂,逻辑清晰。但是网上转载的人太多了,我实在找不到原作者了。 关于MongoDB,我们能看到的资料,基本都是在指导大家如何使...

64140
来自专栏CSDN技术头条

运用Kubernetes进行分布式负载测试

本文为CSDN原创编译文章,禁止转载。 负载测试是开发后台基础架构的重要一环,它不但能够演示系统在真实需求面前的性能表现,还可以通过模拟用户与设备行为,在应用程...

23160
来自专栏Debian社区

Ubuntu Server自18.04 LTS开始不再提供32位镜像

2016年6月份Canonical公司在社区公布的草案,明确自Ubuntu 16.10开始逐步放弃32位支持,并在Ubuntu 18.10中彻底移除对32位架构...

13740

扫码关注云+社区

领取腾讯云代金券