8

我看到这里和http://www.perlmonks.org上有一些类似的问题,但我仍然不明白。想象一下,我有一个带有“lib/”和“t”目录的项目。我用“证明”运行我的测试:

$ cd $PROJECT_ROOT
$ prove ./*.t

我想为“lib/”目录中的一个或多个文件获取 html 报告。我不想报告“t”目录中的文件。一个简单的例子就足够了。谢谢

4

2 回答 2

7
  1. perl Makefile.PL或者perl Build.PL
  2. cover -test
于 2012-06-26T17:26:39.507 回答
7

正确的方法是始终从 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适用Somethingprove自身并且不会传递(与 -I 不同)。

于 2015-02-10T16:09:34.463 回答