App::Prove - 实现 prove
命令。
版本 3.44
Test::Harness 提供了一个命令 prove
,它运行基于 TAP 的测试套件并打印报告。prove
命令是此模块实例的最小包装器。
use App::Prove;
my $app = App::Prove->new;
$app->process_args(@ARGV);
$app->run;
new
创建一个新的 App::Prove
。可以选择传递一个属性初始化器的哈希引用。
state_class
用于维护状态的类的名称的 Getter/Setter。此类应该从 App::Prove::State
子类化,或者提供相同的接口。
state_manager
state_class
实例的 Getter/Setter。
add_rc_file
$prove->add_rc_file('myproj/.proverc');
在 process_args
之前调用,将 rc 文件的内容添加到选项的开头。
process_args
$prove->process_args(@args);
处理命令行参数。属性将被相应地设置。任何文件名都可以在 argv
属性中找到。
在参数无效的情况下退出。
run
执行命令行参数指定的任何操作。prove
命令行工具包含以下代码
use App::Prove;
my $app = App::Prove->new;
$app->process_args(@ARGV);
exit( $app->run ? 0 : 1 ); # if you need the exit code
require_harness
加载一个 harness 替换类。
$prove->require_harness($for => $class_name);
print_version
显示已加载的 TAP::Harness 和当前 Perl 的版本号。
在命令行解析之后,以下属性反映了相应命令行开关的值。它们可以在调用 run
之前进行修改。
archive
argv
backwards
blib
color
directives
dry
exec
extensions
failures
comments
formatter
harness
ignore_exit
includes
jobs
lib
merge
modules
parse
plugins
quiet
really_quiet
recurse
rules
show_count
show_help
show_man
show_version
shuffle
state
state_class
taint_fail
taint_warn
test_args
timer
verbose
warnings_fail
warnings_warn
tapversion
trap
App::Prove
提供对第三方插件的支持。这些插件目前在运行时加载,在解析参数之后(因此您无法更改参数的处理方式,抱歉),通常使用 -Pplugin
开关,例如
prove -PMyPlugin
这将搜索名为 App::Prove::Plugin::MyPlugin
的模块,或者如果没有找到,则搜索 MyPlugin
。如果找不到插件,prove
将会报错并退出。
您可以通过在插件名称后附加一个 =
来传递参数给您的插件,例如 -PMyPlugin=foo
。您可以使用逗号传递多个参数
prove -PMyPlugin=foo,bar,baz
这些参数将传递到您的插件的 load()
类方法(如果有)中,以及调用您的插件的 App::Prove
对象的引用
sub load {
my ($class, $p) = @_;
my @args = @{ $p->{args} };
# @args will contain ( 'foo', 'bar', 'baz' )
$p->{app_prove}->do_something;
...
}
请注意,用户的参数也会作为列表传递到您的插件的 import()
函数中,例如
sub import {
my ($class, @args) = @_;
# @args will contain ( 'foo', 'bar', 'baz' )
...
}
这是为了向后兼容,将来可能会被弃用。
以下是一个示例插件,供您参考
package App::Prove::Plugin::Foo;
# Sample plugin, try running with:
# prove -PFoo=bar -r -j3
# prove -PFoo -Q
# prove -PFoo=bar,My::Formatter
use strict;
use warnings;
sub load {
my ($class, $p) = @_;
my @args = @{ $p->{args} };
my $app = $p->{app_prove};
print "loading plugin: $class, args: ", join(', ', @args ), "\n";
# turn on verbosity
$app->verbose( 1 );
# set the formatter?
$app->formatter( $args[1] ) if @args > 1;
# print some of App::Prove's state:
for my $attr (qw( jobs quiet really_quiet recurse verbose )) {
my $val = $app->$attr;
$val = 'undef' unless defined( $val );
print "$attr: $val\n";
}
return 1;
}
1;