从Google开源RE2库学习到的C++测试方案

最近因为科研需求,一直在研究Google的开源RE2库(正则表达式识别库),库源码体积庞大,用C++写的,对于我这个以前专供Java的人来说真的是一件很痛苦的事,每天只能啃一点点。今天研究了下里面用到的测试方法,感觉挺好的,拿来跟大家分享下!(哈~C++大牛勿喷)

对于我这个C++菜鸟中的菜鸟而言,平时写几个函数想要测试一般都是在main中一个一个的测试,因为没用C++写过项目,没有N多方法所以在main中一个个测试也不费劲。但是对于一个项目而言,或多或少都有N多方法,如果在main中一个个测试的话,不仅效率低而且还容易出错遗漏什么的。那么该怎么进行测试呢?貌似现在有很多C++自动化测试的工具,反正我是一个没用过,也没法评价。我就说下Google在RE2库里是怎么测试的吧。

先用一个超级简单的例子来做讲解:测试两个方法getAsciiNum()和getNonAsciiNum(),分别求flow中ASCII码字符的数目和非ASCII码字符的数目。

第一步:写个头文件,定义测试所用类和测试方法。

// test.h
#define TEST(x, y)   \
    void x##y(void);   \
    TestRegisterer r##x##y(x##y, # x "." # y);   \
    void x##y(void)  

void RegisterTest(void (*)(void), const char*);  

class TestRegisterer {
public:
    TestRegisterer(void (*fn)(void), const char *s) {
        RegisterTest(fn, s);
    }
};

解析:首先看定义的类TestRegisterer,有个构造方法,两个参数:

1. 一个函数指针:void (*fn)(void),指向我们具体要编写的测试方法名;

2. 一个字符串:constchar *s,属于该测试方法的描述信息。

这个构造函数调用了另一个函数RegisterTest(),具体实现见下面。

然后看最上面定义的宏TEST(x, y),主要将其替换为TestRegisterer r##x##y(x##y, # x"." # y);其中x##y作为方法名,# x"." # y作为描述信息。这里可能有些和我一样入门级别的人没怎么看懂这个宏,因为不知道前后加void x##y(void);这个是干嘛用的?一开始我也没想明白,因为不加的话就会报错,后来通过gcc的-E选项激活宏编译,看了下编译期间展开成啥模样了。这里以一个简单的例子作为说明:假设x为test,y为flow,如果不加前后那个,那么展开后为TestRegisterer rtestflow(testflow, "test.flow"); 这明显是个函数声明,有两个参数,第二个是字符串,那么第一个是什么?编译器会认为是个函数名(实际上也是的),但这个函数前面明显未定义,就会报找不到此函数声明的错误,所以就需要在之前加上void x##y(void);声明函数,当然光声明不实现在链接时同样报错,所以就需要在之后加上void x##y(void)进行具体实现了,注意这里没有逗号,也没有具体实现的{},因为这只是宏,Google的所有测试函数是这样写的:

TEST(x, y) {
    ....      // 具体实现
}

那么上面例子TEST(test, flow){ ...  // 具体实现 },整体展开后就是这样:

void testflow(void);
TestRegisterer rtestflow(testflow, "test.flow");
void testflow(void) {
    ....      // 具体实现
}

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索c++
, 测试
, 函数
, 方法
, 的 icture x库
, 一个
, void
开源库
,以便于您获取更多的相关知识。

时间: 2025-01-20 12:11:35

从Google开源RE2库学习到的C++测试方案的相关文章

Disable Google Fonts Plus插件禁用谷歌开源字体库

由于Google Fonts字体库等服务在国内被禁用,许多使用Google Fonts的WordPress网站打开异常困难.今天,我们给大家带来了一款插件,Disable Google Fonts Plus,可以方便地解决这个问题. 为什么要关闭Google Fonts字体库 Google Fonts 是谷歌公司推出的一项字体库服务,主要是为了解决跨平台的字体一致性问题.WordPress 3.8版本在重新设计WordPress后台界面的时候,开始使用Google Fonts字体库. 使用Goo

Google 开源的JavaScript工具和库集锦

1.JavaScript代码风格 http://google-styleguide.googlecode.com/svn/trunk/javascriptguide.xml 2.Closure Compiler(闭包编辑器) https://developers.google.com/closure Google此前曾开源了不少JavaScript工具,如Closure Compiler(用于生成紧凑且高性能代码的工具).Closure Templates(用于动态生成HTML).Closure

[Android]Google 开源的 Android 排版库:FlexboxLayout

最近Google开源了一个项目叫「FlexboxLayout」. 1.什么是 Flexbox 简单来说 Flexbox 是属于web前端领域CSS的一种布局方案,是2009年W3C提出了一种新的布局方案,可以简便.完整.响应式地实现各种页面布局,并且 React Native 也是使用的 Flex 布局. 你可以简单的理解为 Flexbox 是CSS领域类似 Linearlayout 的一种布局,但是要比 Linearlayout 要强大的多. 2.什么是 FlexboxLayout? 刚才说了

机器视觉开源处理库汇总

机器视觉开源处理库汇总 从cvchina搞到的机器视觉开源处理库汇总,转来了,很给力,还在不断更新... 通用库/General Library OpenCV 无需多言. RAVL Recognition And Vision Library. 线程安全.强大的IO机制.包含AAM. CImg 很酷的一个图像处理包.整个库只有一个头文件.包含一个基于PDE的光流算法. 图像,视频IO/Image, Video IO FreeImage DevIL ImageMagick FFMPEG Video

以大三本科生角度谈计算机学习:关于开源产品与学习书籍

 转载请注明出处:http://blog.csdn.net/zbf8441372 作为程序猿,除了技术书籍,我们还应该多读一些锻炼思维,甚至和心理学相关的书. 这篇文章写给现在的自己--作为阶段性总结和后续发展的指向标,也写给几年后的自己--当有一天我回过头来,看我这拙劣的文笔和幼稚的想法的时候,会不会忍俊不禁.   读者?         这篇文章不适合科研型的人士,所以这里不会有数学,不会有算法的分析和讨论.只要你打算做的是Java开发者或者对开源技术有学习兴趣和热情,肯定有合你胃口的地方.

我的Android进阶之旅------>【强力推荐】Android开源图表库XCL-Charts版本发布及展示页

         因为要做图表相关的应用,后来百度发现了一个很好的Android开源图表库(XCL-Charts is a free charting library for Android platform.)                      下面内容转载于:http://blog.csdn.net/xcl168/article/details/29675613,详细介绍了XCL-Charts的展示内容.   =====================================

DT科技评论第36期:Facebook开源Caffe2深度学习框架

DT科技评论 Data Technology Review 第 36 期           阿里云研究中心,人民网研究院,DeepTech深科技 本期目录 谷歌斥资2910万美元建数据中心 Facebook推出AR新应用 Facebook开源Caffe2深度学习框架 Facebook研发"意念打字" IBM Security App Exchange平台上的应用程序突破90个 谷歌发布新版谷歌地球 谷歌正在开发招聘App Malwarebytes实验室介绍:网络犯罪战术与技术报告 英

iOS5系统API和5个开源库的JSON解析速度测试

   iOS5系统API和5个开源库的JSON解析速度测试 iOS5新增了JSON解析的API,我们将其和其他五个开源的JSON解析库进行了解析速度的测试,下面是测试的结果和工程代码附件.   我们选择的测试对象包含下面的这几个框架,其中NSJSONSerialization是iOS5系统新增的JSON解析的API,需要iOS5的环境,如果您在更低的版本进行测试,应该屏蔽相应的代码调用.   - [SBJSON (json-framework)](http://code.google.com/p

开源项目live555学习心得

    推荐:伊朗美女找丈夫比找工作难女人婚前一定要看清三件事 × 登录注册   疯狂少男-IT技术的博客 http://blog.sina.com.cn/crazyboyzhaolei [订阅][手机订阅]   首页博文目录图片关于我 个人资料 疯狂少男   Qing 微博       加好友发纸条 写留言加关注     博客等级: 博客积分:22 博客访问:5,717 关注人气:2 获赠金笔:0 赠出金笔:0 荣誉徽章:       精彩图文   相关博文 十大女星全裸戏光脱却不漏点 八教兽