从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);这个是干嘛用的?一开始我也没想明白&

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值