```{index} single: Test::Builder::Module ``` # Test::Builder::Module Base class for test modules ## SYNOPSIS ```perl ## 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; ``` ## DESCRIPTION This is a superclass for [Test::Builder](../Builder.md)-based modules. It provides a handful of common functionality and a method of getting at the underlying [Test::Builder](../Builder.md) object. ### Importing Test::Builder::Module is a subclass of [Exporter](../../Exporter.md) which means your module is also a subclass of Exporter. @EXPORT, @EXPORT\_OK, etc... all act normally. A few methods are provided to do the `use Your::Module tests => 23` part for you. #### import Test::Builder::Module provides an `import()` method which acts in the same basic way as [Test::More](../More.md)'s, setting the plan and controlling exporting of functions and variables. This allows your module to set the plan independent of [Test::More](../More.md). All arguments passed to `import()` are passed onto `Your::Module->builder->plan()` with the exception of `import =>[qw(things to import)]`. ```perl use Your::Module import => [qw(this that)], tests => 23; ``` says to import the functions `this()` and `that()` as well as set the plan to be 23 tests. `import()` also sets the `exported_to()` attribute of your builder to be the caller of the `import()` function. Additional behaviors can be added to your `import()` method by overriding `import_extra()`. #### import\_extra ```perl Your::Module->import_extra(\@import_args); ``` `import_extra()` is called by `import()`. It provides an opportunity for you to add behaviors to your module based on its import list. Any extra arguments which shouldn't be passed on to `plan()` should be stripped off by this method. See [Test::More](../More.md) for an example of its use. **NOTE** This mechanism is _VERY ALPHA AND LIKELY TO CHANGE_ as it feels like a bit of an ugly hack in its current form. ### Builder Test::Builder::Module provides some methods of getting at the underlying Test::Builder object. #### builder ```perl my $builder = Your::Class->builder; ``` This method returns the [Test::Builder](../Builder.md) object associated with Your::Class. It is not a constructor so you can call it as often as you like. This is the preferred way to get the [Test::Builder](../Builder.md) object. You should _not_ get it via `Test::Builder->new` as was previously recommended. The object returned by `builder()` may change at runtime so you should call `builder()` inside each function rather than store it in a global. ```perl sub ok { my $builder = Your::Class->builder; return $builder->ok(@_); } ``` ## SEE ALSO [Test2::Manual::Tooling::TestBuilder](../../Test2/Manual/Tooling/TestBuilder.md) describes the improved options for writing testing modules provided by [Test2](../../Test2.md).