PERL单元测试简易框架

本来是写个测试脚本来测试函数是否正确,写着写着就把输出写的漂亮了些,于是将代码抽出来,做成一个公共框架。

说是框架,非常王婆卖瓜,因为就一百五十行SHELL脚本,PERL本是有单元测试的,但是我认为几行代码用那单元测试有点小题大做,最关键是,我的需求非常少,就是要跑几句代码,检测一下返回值,并且匹配一下预期数据,然后列出测试结果而已。

我之前喜欢这样简单测试PERL函数代码:

这样跑一遍,或者加-d调试一下,函数是否有问题,一下就能看出来,唯一的问题是,测试多组输入参数和输出的时候,每次都要靠双眼来对比结果是否符合预期。
继续阅读

代码上库前的自动review实现

perlcritic是一款PERL的静态代码检测工具,官网为:http://www.perlcritic.org
源码下载:https://github.com/Perl-Critic/Perl-Critic,可以参考http://search.cpan.org/dist/Perl-Critic/使用,可以使用CPAN安装:

本日志自动扫描工具建立在Critic基础上,为我们的日志检测规则写了一插件,名为RequireLogStatment,安装文件覆盖/usr/local/share/perl/5.14.2/Perl/Critic/Policy/CodeLayout/RequireLogStatment.pm 即可使用。

检测规则

针对部门使用大量PERL代码做日志规范,当前主要检查该打日志的地方未打日志的行为,该打日志的检查点为:
EXITWORD:return, exit, _exit, die

打日志的函数为:
LOGWORD:ldie lemerg lalert lcrit lerror lwarn lnotice linfo ldebug dbg1 dbg2 dbg3 dbgv

不是所有EXITWORD前都要打日志,且日志级别不一定是lerror,例如一个函数运行最后一条return语句作为合法出口不要求打日志,为了避免日志过多,建议大家按照“先处理错误,最后处理正确原则”书写代码,例如:

如果某些语句真不需要日志,可以添加annotation,规则是在语句前一条注释处加:

继续阅读