6

有没有办法测量脚本的 POD 覆盖率(例如*.pl)?

我可以使用and测量的文档覆盖率,但我无法测量scripts的文档覆盖率,因为用于检查包内容的底层用途,由于缺少文件而失败。Pod::CoverageTest::Pod::CoveragePod::CoverageDevel::Symdumprequire.pm

有没有办法解决这个问题?

(我必须在文件中包含 POD 文档.pl,因此将所有内容移动到模块中并记录它对我来说不是一个好的解决方案。无论我能做到这一点,它已经这样做了。)

4

2 回答 2

4

Pod::Coverage 加载(执行)模块以使其创建 subs 等。您将不得不以某种方式阻止您的 .pl 正常运行。

#!/usr/bin/perl
...
main(@ARGV) if !$ENV{NO_RUN};
1; # For do()

但是一旦你这样做了,就很容易了,因为你告诉 Pod::Coverage 要检查哪个包 ( package) 和要检查哪个文件 ( pod_from)。

#!/usr/bin/perl

use strict;
use warnings;

use Test::More tests => 1;

use Pod::Coverage qw( );

{
    package the_script;
    local $ENV{NO_RUN} = 1;
    do "script.pl" or die $@;
}

my $pc = Pod::Coverage->new(
   package  => 'the_script',
   pod_from => 'script.pl',
);

# P::C expects "require the_script;" to succeed.
$INC{"the_script.pm"} = 1;

my $coverage = $pc->coverage();
die $pc->why_unrated()
   if !defined($coverage);

ok($coverage)
   or diag("Not covered: ".join(', ', $pc->naked()));

1;

经测试。

于 2012-09-25T15:53:57.577 回答
4

使您的程序成为模数。这就是 ikegami 正在做的事情,但他让你设置一个环境变量。

run(@ARGV) unless caller;

一旦你的程序真的是一个具有一些默认行为的模块,你就可以在它上面使用模块工具。

于 2012-09-25T22:13:23.830 回答