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
部分。
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()
方法添加其他行为。
Your::Module->import_extra(\@import_args);
import_extra()
由 import()
调用。它为您提供了一个机会,根据模块的导入列表为您的模块添加行为。
此方法应剥离任何不应传递给 plan()
的额外参数。
请参阅 Test::More 以了解其用法的示例。
注意 此机制处于 非常早期的 Alpha 阶段,可能会发生变化,因为它在当前形式下感觉有点像一个丑陋的 hack。
Test::Builder::Module 提供了一些方法来获取底层的 Test::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 提供的用于编写测试模块的改进选项。