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
用於取得或設定用於維護狀態的類別名稱。此類別應繼承自 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
屬性中找到。
無效參數時會 die。
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;