内容

名称

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

显示已加载的 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

PLUGINS

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;

另请参阅

prove, TAP::Harness