PERL单元测试简易框架

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

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

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

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

有了此简易框架,两个函数的四条完整单元测试案例,你只需要类似这样写:

然后在脚本目录下的expected目录准备对应测试案例名称的输出以便对比结果。执行输出类似:

这是全成功的输出,最后一行可以看出,30个案例,全部成功。

也有失败的效果:

只有一个成功,23个失败,3个WARN表示内部错误(找不到输出文件)。

现在看一下所谓的框架unitest.sh:

童叟无欺,加了一些无相关的代码,整个简易框架就一百五十行代码。不论什么框架,殊途同归,单元测试过程中,发现如下意义:

  1. 构造单元测试案例的同时,就是思考异常的过程,过程会发现一些没考虑的地方,例如我在测试过程发现了VMID项为中文调用写入函数出错;技术支持可能手动修改脚本,可能残留空格在VMID两侧,导致匹配失败。
  2. 可复现性较好,例如,我在代码里面添加了对中文字符串的转换后,再运行一遍案例,是否对已有功能有影响一目了然,而不需要再次人工确认。
  3. SHELL脚本做单元测试,相对用原生语言,例如PERL或C,更加灵活,且测试框架本身无外部依赖。

PDF下载
MutexVMs.pm.test.zip

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">