掌握Perl的测试工作马Prove
Prove是Perl自带的一个测试运行工具,它拥有许多选项,对于初学者来说可能会感到困惑。如果你从未使用过Prove或者对其使用不太自信,请不要灰心!本文将帮助你熟悉Prove及其最常用的选项。
基础知识
如果你已经安装了Perl,那么Prove也应该已经安装好了。为了演示Prove的功能,我将使用Git克隆Mojolicious仓库。我喜欢用Mojolicious来演示Prove,因为它有一个庞大的测试套件。在命令行
$ git clone https://github.com/kraih/mojo
$ cd mojo
所以我已经克隆了Mojolicious仓库,并切换到了项目目录。现在,我准备使用Prove运行一些测试了!
$ prove -l t/mojo/asset.t
我使用prove
命令执行了Prove。我包含了-l
选项,这样Prove就会加载位于lib
目录下的Mojolicious代码。如果不这样做,Perl将找不到在t/mojo/asset.t
中引用的Mojolicious代码,并引发错误,或者更糟糕的是,它可能会针对我系统上已经安装的Mojolicious的较旧版本运行测试。
有时要包含的代码并不直接位于lib
目录中。对于这些情况,Prove提供了-I
选项,表示“包含”
prove -I/path/to/lib /path/to/test_file
Prove可以运行单个测试文件,或者如果提供了一个包含多个测试文件的目录,它将运行所有这些文件
$ prove -l t/mojo
这将在t/mojo
目录下运行所有测试文件。
使用“r”递归执行测试文件
Mojolicious项目在t
目录下的几个不同目录中都有测试文件。找到所有这些目录路径并告诉Prove可能会很繁琐。相反,Prove提供了-r
选项来递归搜索测试文件。
$ prove -lr
此选项执行了t
目录下的所有测试文件,大约有10,000个测试分布在85个不同的文件中。是不是很方便?请注意,我没有提供t
目录作为参数,因为Prove默认会搜索t
目录。这真是方便!
使用“j”并行运行测试
运行大量测试文件的能力很有用,但是运行所有测试可能会花费很长时间。在我的机器上,执行Mojolicious测试套件需要32秒。为了加快速度,Prove可以在多个进程中并行运行测试文件,以在多个进程之间共享工作。为此,我只需添加-j
选项以及我想要使用的进程数。我有一台四核机器,所以我将使用4个不同的进程
$ prove -lr -j 4
这次,prove在12秒内执行了所有测试。这提高了266%的速度,很不错!
使用“v”选项获取更多详细信息
为了最小化行噪声,默认情况下,Prove提供总结级别的统计信息和低级别的测试失败详细情况。有时查看每个测试的输出很有用。我可以通过添加-v
选项来查看这些详细信息,表示“详细”
$ prove -lrv
运行Perl 6测试
Prove可以运行其他语言的测试,只要测试遵循Test Anything Protocol。Perl 6单元测试遵循TAP,所以我们可以使用Prove来运行Perl 6测试!我可以在我的Perl 6模块URI::Encode上演示这一点。为了跟随,只需使用Git克隆仓库
$ git clone https://github.com/dnmfarrell/URI-Encode
$ cd URI-Encode
要使用Prove运行非Perl测试,我们需要传递带有程序名称的--exec
选项。这告诉Prove使用哪个程序来执行测试。如下所示
$ prove --exec perl6
请注意,我无需传递要运行的测试文件的文件路径。这只是巧合,按照惯例,Perl6模块的测试通常位于t
目录中,通常具有.t
扩展名。对于其他语言,你需要指定测试文件路径
$ prove --exec some_program /path/to/testfile
文档
您可以通过使用帮助选项-h
来获取Prove接受的选项摘要
$ prove -h
要获取更详细的文档,请使用perldoc
$ perldoc prove
Perldoc是另一个有用的Perl工具,如果您想了解更多关于它的信息,请查看我们的入门文章:《Hello perldoc——生产力助推器》。Prove还有一个man页面条目(如果您在基于Unix/BSD的系统上)。
Prove速查表
prove [options] [filepath]
Options
-------
l Include the "lib" dir
I Include a dir: -I/path/to/lib
r Recursively search and run test files
j Parallel, specify # procs: -j 4
v Verbose test output
h Help, summary of options
exec Exec tests in another program: --exec perl6
这篇文章最初发布在PerlTricks.com。
标签
反馈
这篇文章有问题吗?请帮助我们通过在GitHub上打开一个issue或pull request来解决。