内容

名称

Test::Builder::Module - 测试模块基类

概要

# Emulates Test::Simple
package Your::Module;

my $CLASS = __PACKAGE__;

use parent 'Test::Builder::Module';
@EXPORT = qw(ok);

sub ok ($;$) {
    my $tb = $CLASS->builder;
    return $tb->ok(@_);
}

1;

描述

这是基于 Test::Builder 的模块的超类。它提供了一些常见的功能,以及一种获取底层 Test::Builder 对象的方法。

导入

Test::Builder::Module 是 Exporter 的子类,这意味着你的模块也是 Exporter 的子类。@EXPORT、@EXPORT_OK 等... 正常工作。

提供了一些方法来为你完成 use Your::Module tests => 23 部分。

import

Test::Builder::Module 提供了一个 import() 方法,其基本作用方式与 Test::More 的相同,用于设置计划并控制函数和变量的导出。这允许您的模块独立于 Test::More 设置计划。

传递给 import() 的所有参数都将传递给 Your::Module->builder->plan(),除了 import =>[qw(things to import)]

use Your::Module import => [qw(this that)], tests => 23;

表示导入函数 this()that(),并将计划设置为 23 个测试。

import() 还将构建器的 exported_to() 属性设置为 import() 函数的调用者。

可以通过覆盖 import_extra() 为您的 import() 方法添加其他行为。

import_extra

Your::Module->import_extra(\@import_args);

import_extra()import() 调用。它为您提供了一个机会,根据模块的导入列表为您的模块添加行为。

此方法应剥离任何不应传递给 plan() 的额外参数。

请参阅 Test::More 以了解其用法的示例。

注意 此机制处于 非常早期的 Alpha 阶段,可能会发生变化,因为它在当前形式下感觉有点像一个丑陋的 hack。

Builder

Test::Builder::Module 提供了一些方法来获取底层的 Test::Builder 对象。

builder

my $builder = Your::Class->builder;

此方法返回与 Your::Class 关联的 Test::Builder 对象。它不是构造函数,因此您可以根据需要多次调用它。

这是获取 Test::Builder 对象的首选方法。您不应通过 Test::Builder->new 获取它,如以前建议的那样。

builder() 返回的对象可能在运行时发生变化,因此您应该在每个函数内部调用 builder(),而不是将其存储在全局变量中。

sub ok {
    my $builder = Your::Class->builder;

    return $builder->ok(@_);
}

另请参阅

Test2::Manual::Tooling::TestBuilder 描述了 Test2 提供的用于编写测试模块的改进选项。