TAP::Parser::ResultFactory - 用于创建 TAP::Parser 输出对象的工厂
use TAP::Parser::ResultFactory;
my $token = {...};
my $factory = TAP::Parser::ResultFactory->new;
my $result = $factory->make_result( $token );
版本 3.44
这是一个简单的工厂类,它返回一个 TAP::Parser::Result 子类,表示来自 TAP(通常是一行)的当前测试数据位。它主要由 TAP::Parser::Grammar 使用。除非您要进行子类化,否则您可能不需要直接使用此模块。
new
创建一个新的工厂类。注意:目前您不需要实例化一个工厂来使用它。
make_result
返回一个实例,该实例是传入测试令牌的适当类。
my $result = TAP::Parser::ResultFactory->make_result($token);
也可以作为实例方法调用。
class_for
接受一个参数:$type
。返回此 $type 的类,或使用错误croak
。
register_type
接受两个参数:$type
、$class
这允许您用自己的自定义类型覆盖现有类型,或注册一个全新的类型,例如
# create a custom result type:
package MyResult;
use strict;
use base 'TAP::Parser::Result';
# register with the factory:
TAP::Parser::ResultFactory->register_type( 'my_type' => __PACKAGE__ );
# use it:
my $r = TAP::Parser::ResultFactory->( { type => 'my_type' } );
然后,您的自定义类型应由 TAP::Parser 自动获取。
有关子类化概述,请参见 TAP::Parser 中的“子类化”。
在创建自己的 ResultFactory
时,有几件事需要牢记
工厂本身永远不会被实例化(这可能会在将来发生变化)。这意味着永远不会调用 _initialize
。
永远不会调用 TAP::Parser::Result->new
,$tokens 会被重新祝福。这将在未来版本中发生变化!
TAP::Parser::Result 子类将直接在 TAP::Parser::ResultFactory 中注册自己
package MyFooResult;
TAP::Parser::ResultFactory->register_type( foo => __PACKAGE__ );
当然,由您决定是否忽略它们。
package MyResultFactory;
use strict;
use MyResult;
use base 'TAP::Parser::ResultFactory';
# force all results to be 'MyResult'
sub class_for {
return 'MyResult';
}
1;