# man > Test::Builder::Module

## NAME
    [Test::Builder::Module](https://www.chedong.com/phpMan.php/perldoc/Test%3A%3ABuilder%3A%3AModule/markdown) - Base class for test modules

## SYNOPSIS
      # Emulates [Test::Simple](https://www.chedong.com/phpMan.php/perldoc/Test%3A%3ASimple/markdown)
      package [Your::Module](https://www.chedong.com/phpMan.php/perldoc/Your%3A%3AModule/markdown);

      my $CLASS = __PACKAGE__;

      use parent '[Test::Builder::Module](https://www.chedong.com/phpMan.php/perldoc/Test%3A%3ABuilder%3A%3AModule/markdown)';
      @EXPORT = qw(ok);

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

      1;

## DESCRIPTION
    This is a superclass for [Test::Builder](https://www.chedong.com/phpMan.php/perldoc/Test%3A%3ABuilder/markdown)-based modules. It provides a handful of common
    functionality and a method of getting at the underlying [Test::Builder](https://www.chedong.com/phpMan.php/perldoc/Test%3A%3ABuilder/markdown) object.

### Importing
    [Test::Builder::Module](https://www.chedong.com/phpMan.php/perldoc/Test%3A%3ABuilder%3A%3AModule/markdown) is a subclass of Exporter 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](https://www.chedong.com/phpMan.php/perldoc/Your%3A%3AModule/markdown) tests => 23" part for you.

   import
    [Test::Builder::Module](https://www.chedong.com/phpMan.php/perldoc/Test%3A%3ABuilder%3A%3AModule/markdown) provides an import() method which acts in the same basic way as
    [Test::More](https://www.chedong.com/phpMan.php/perldoc/Test%3A%3AMore/markdown)'s, setting the plan and controlling exporting of functions and variables. This allows
    your module to set the plan independent of [Test::More](https://www.chedong.com/phpMan.php/perldoc/Test%3A%3AMore/markdown).

    All arguments passed to import() are passed onto "[Your::Module](https://www.chedong.com/phpMan.php/perldoc/Your%3A%3AModule/markdown)->builder->plan()" with the
    exception of "import =>[qw(things to import)]".

        use [Your::Module](https://www.chedong.com/phpMan.php/perldoc/Your%3A%3AModule/markdown) 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
        [Your::Module](https://www.chedong.com/phpMan.php/perldoc/Your%3A%3AModule/markdown)->import_extra(\@import_args);

### import_extra
    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](https://www.chedong.com/phpMan.php/perldoc/Test%3A%3AMore/markdown) 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](https://www.chedong.com/phpMan.php/perldoc/Test%3A%3ABuilder%3A%3AModule/markdown) provides some methods of getting at the underlying [Test::Builder](https://www.chedong.com/phpMan.php/perldoc/Test%3A%3ABuilder/markdown) object.

   builder
      my $builder = [Your::Class](https://www.chedong.com/phpMan.php/perldoc/Your%3A%3AClass/markdown)->builder;

    This method returns the [Test::Builder](https://www.chedong.com/phpMan.php/perldoc/Test%3A%3ABuilder/markdown) object associated with [Your::Class](https://www.chedong.com/phpMan.php/perldoc/Your%3A%3AClass/markdown). 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](https://www.chedong.com/phpMan.php/perldoc/Test%3A%3ABuilder/markdown) object. You should *not* get it via
    "[Test::Builder](https://www.chedong.com/phpMan.php/perldoc/Test%3A%3ABuilder/markdown)->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.

      sub ok {
          my $builder = [Your::Class](https://www.chedong.com/phpMan.php/perldoc/Your%3A%3AClass/markdown)->builder;

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

## SEE ALSO
    [Test2::Manual::Tooling::TestBuilder](https://www.chedong.com/phpMan.php/perldoc/Test2%3A%3AManual%3A%3ATooling%3A%3ATestBuilder/markdown) describes the improved options for writing testing modules
    provided by Test2.

