我看到这里和http://www.perlmonks.org上有一些类似的问题,但我仍然不明白。想象一下,我有一个带有“lib/”和“t”目录的项目。我用“证明”运行我的测试:
$ cd $PROJECT_ROOT
$ prove ./*.t
我想为“lib/”目录中的一个或多个文件获取 html 报告。我不想报告“t”目录中的文件。一个简单的例子就足够了。谢谢
我看到这里和http://www.perlmonks.org上有一些类似的问题,但我仍然不明白。想象一下,我有一个带有“lib/”和“t”目录的项目。我用“证明”运行我的测试:
$ cd $PROJECT_ROOT
$ prove ./*.t
我想为“lib/”目录中的一个或多个文件获取 html 报告。我不想报告“t”目录中的文件。一个简单的例子就足够了。谢谢
perl Makefile.PL
或者perl Build.PL
cover -test
正确的方法是始终从 Makefile.PL/Build.PL 开始,正如所选答案所暗示的那样。然而,有时你不是开始的人,所以...
我曾经制作过一个假的makefile:
% cat Makefile
test:
prove -Ilib -r t
以下似乎也有效(不接触磁盘上的任何文件):
cover -t -make 'prove -Ilib -r t; exit $?'
这只适用于 perl 的system
/exec
处理带有 shell 元字符的参数(;
在这种情况下),并且如果cover
决定更严格地引用它,将来可能会中断。它也不应该在windows下工作。我希望cover
有一个-prove
选择。
这仍然会为 *.t 以及非标准位置的 CPAN 模块生成覆盖范围。可以使用 +select/+ignore 选项修复此行为(请参阅Devel::Cover 的手册页):
cover -t +select ^lib +ignore ^
所以 tl;dr "magic" 命令是
cover -t +select ^lib +ignore ^ -make 'prove -Ilib -r t; exit $?'
编辑以下内容对我不起作用 - 它只打印简短摘要:
PERL5OPT="$PERL5OPT -MDevel::Cover" prove -Ilib -r t
cover -t +select ^lib +ignore ^
请注意,它prove -MSomething
适用Something
于prove
自身并且不会传递(与 -I 不同)。