内容

名称

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 时,有几件事需要牢记

  1. 工厂本身永远不会被实例化(这可能会在将来发生变化)。这意味着永远不会调用 _initialize

  2. 永远不会调用 TAP::Parser::Result->new,$tokens 会被重新祝福。这将在未来版本中发生变化!

  3. 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;

另请参阅

TAP::ParserTAP::Parser::ResultTAP::Parser::Grammar