Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

95 lines (64 sloc) 3.009 kb

A GUIDE TO WRITING TESTS FOR MODULE::BUILD

This document provides tips on writing new tests for Module::Build. Please note that many existing tests were written prior to these guidelines and have many different styles. Please don't copy/paste old tests by rote without considering better ways to test. See sample.t for a starter test file.

TEST FILE PREAMBLE

Every Module::Build test should begin with the same preamble to ensure that the test library is set properly and that the correct version of Module::Build is being tested.

  use strict;
  use lib 't/lib';
  use MBTest tests => 2; # or 'no_plan'

  blib_load('Module::Build');

The MBTest module is in t/lib/ and subclasses Test::More. When loaded it cleans up several environment variables that could cause problems, tweaks @INC and exports several helper functions. See that module for details.

CREATING A TEST DISTRIBUTION

The DistGen module in t/lib/ should be used to create sample distributions for testing. It provides numerous helpful methods to create a skeleton distribution, add files, change files, and so on. Run perldoc on t/lib/DistGen.pm to see the documentation.

  # CREATE A TEST DISTRIBUTION

  use DistGen;

  # create dist object in a temp directory
  my $dist = DistGen->new;

  # enter the test distribution directory before further testing
  $dist->chdir_in;

  # generate the skeleton files
  $dist->regen;

GETTING A MODULE::BUILD OBJECT

From inside the test distribution, you can get the Module::Build object configured in Build.PL using the new_from_context method on the dist object. This is just like Module::Build's new_from_context except it passes quiet => 1 to avoid sending output to the terminal. Use the Module::Build object to test the programmatic API.

  my $mb = $dist->new_from_context( quiet => 1 );
  isa_ok( $mb, "Module::Build" );
  is( $mb->dist_name, "Simple", "dist_name is 'Simple'" );

TESTING THE COMMAND LINE API

The command line API is tested by running subprocesses, not via a Module::Build object. The DistGen object has helper methods for running Build.PL and Build and passing arguments on the command line.

  $dist->run_build_pl( '--quiet' );
  $dist->run_build( 'test' );

TYPICAL TESTING CYCLE

The typical testing cycle is to generate or modify a test distribution, either through the DistGen object or directly in the filesystem, then regenerate the distribution and test it (or run command line tests and observe the result.)

  # Modify the distribution

  $dist->change_build_pl(
    {
      module_name   => $dist->name,
      license       => 'artistic',
    }
  );
  $dist->regen;

  # Get a new build object and test it

  $mb = $dist->new_from_context;
  is( $mb->license, "artistic", "saw 'artistic' license" );

COPYRIGHT

This documentation is Copyright (C) 2009 by David Golden. You can redistribute it and/or modify it under the same terms as Perl 5.10.0.

Jump to Line
Something went wrong with that request. Please try again.