有没有办法测量脚本的POD覆盖范围(例如* .pl)?
我可以使用Pod :: Coverage和Test :: Pod :: Coverage测量包的文档覆盖率,但是我无法测量它的脚本,因为Pod :: Coverage和底层的Devel :: Symdump使用require来检查包的内容,由于缺少.pm文件而失败.
有办法解决这个问题吗?
(我必须在.pl文件中包含POD文档,因此将所有内容移动到模块中并将其记录在那里对我来说不是一个好的解决方案.无论我在哪里,它都已经这样做了.)
解决方法
Pod :: Coverage加载(执行)模块以让它创建subs等.您必须以某种方式阻止.pl正常运行.
#!/usr/bin/perl ... main(@ARGV) if !$ENV{NO_RUN}; 1; # For do()
但是一旦你这样做了,这很容易,因为你告诉Pod :: Coverage要检查哪个包(包)和要检查的文件(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;
测试.