目錄

名稱

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);

顯示已載入的 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;

另請參閱

proveTAP::Harness