Test::Distribution - perform tests on all modules of a distribution
$ cat t/01distribution.t use Test::More; BEGIN { eval { require Test::Distribution; }; if($@) { plan skip_all => 'Test::Distribution not installed'; } else { import Test::Distribution; } } $ make test ...
When using this module in a test script, it goes through all the modules in your distribution, checks their POD, checks that they compile ok and checks that they all define a $VERSION.
This module also performs a numer of test on the distribution itself. It checks that your files match your SIGNATURE file if you have one. It checks that your distribution isn't missing certain 'core' description files. It checks to see you havent' missed out listing any pre-requisites in Makefile.PL.
It defines its own testing plan, so you usually don't use it in
conjunction with other Test::*
modules in the same file. It's
recommended that you just create a one-line test script as shown in the
SYNOPSIS above. However, there are options...
NOTE If you do not specify any options Test::Distribution will run all test types except signature testing which must always be explicitly switched on.
In the future I may change the default to run no tests at all as this sounds safer. Mail me if you disagree.
On the line in which you use()
this module, you can specify named
arguments that influence the testing behavior.
tests => NUMBER
Specifies that in addition to the tests run by this module, your test script will run additional tests. In other words, this value influences the test plan. For example:
use Test::Distribution tests => 1; use Test::More; is($foo, $bar, 'baz');
It is important that you don't specify a tests
argument when
using Test::More
or other test modules as the plan is handled by
Test::Distribution
.
DEPRECATED FEATURE. I plan to remove this in the future unless I'm contacted by someone that says they find this useful.
only => STRING|LIST
Specifies that only certain sets of tests are to be run. Possible values are those mentioned in TEST TYPES below. For example, if you only want to run the POD tests, you could say:
use Test::Distribution only => 'pod';
To specify that you only want to run the POD tests and the use
tests,
and also that you are going to run two tests of your own, use:
use Test::Distribution only => [ qw/pod use/ ], tests => 2;
Note that when you specify the versions
option, the use
option
is automatically added. This is because in order to get a module's
$VERSION
, it has to be loaded. In this case we might as well run a
use
test.
The value for only
can be a string or a reference to a list of strings.
not => STRING|LIST
Specifies that certain types of tests should not be run. All tests not mentioned in this argument are run. For example, if you want to test everything except the POD, use:
use Test::Distribution not => 'pod';
The value for not
can be a string or a reference to a list of
strings. Although it doesn't seem to make much sense, you can use both
only
and not
. In this case only the tests specified in only
,
but not not
are run (if this makes any sense).
distversion
podcoveropts
Here is a description of the types of tests available.
description
Checks that the following files exist:
prereq
use()
d modules that aren't in the perl core are
also mentioned in Makefile.PL's PREREQ_PM
.
pod
podcover
sig
use
use()
s the modules to make sure the load happens ok.
versions
$VERSION
strings.
There are a few subroutines to help you see what this module is doing. Note that these subroutines are neither exported nor exportable, so you have to call them fully qualified.
Test::Distribution::packages()
blib/lib/Foo/Bar.pm
is expected to
be available via use Foo::Bar
.
Test::Distribution::files()
blib/lib
.
Test::Distribution::num_tests()
This module uses Module::Build for its installation. To install this module type the following:
perl Build.PL ./Build ./Build test ./Build install
If you do not have Module::Build type:
perl Makefile.PL
to fetch it. Or use CPAN or CPANPLUS and fetch it "manually".
This module requires these other modules and libraries:
File::Basename File::Find::Rule File::Spec Test::More
This module has these optional dependencies:
Module::CoreList Test::Pod Test::Pod::Coverage
If Module::CoreList
is missing, the prereq
tests are skipped.
If Test::Pod
is missing, the pod
tests are skipped.
Just because these items are in the todo list, does not mean they will actually be done. If you think one of these would be helpful say so - and it will then move up on my priority list.
export
test type
Let me know what you think of these ideas. Are they necessary? Unnecessary? Do you have feature requests of your own?
To report a bug or request an enhancement use CPAN's excellent Request Tracker.
This source is part of a SourceForge project which always has the latest sources in svn.
http://sourceforge.net/projects/sagar-r-shah/
Marcel Grünauer <marcel@cpan.org>
Sagar R. Shah
This module was inspired by a use.perl.org journal entry by brian d foy
(see
http://use.perl.org/~brian_d_foy/journal/7463) where he describes an idea by
Andy Lester.
Copyright 2002-2003 Marcel Grünauer. All rights reserved.
Copyright 2003-2007, Sagar R. Shah, All rights reserved.
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
perl(1), ExtUtils::Manifest(3pm), File::Find::Rule(3pm), Module::CoreList(3pm), Test::More(3pm), Test::Pod(3pm), Test::Pod::Coverage(3pm), Test::Signature(3pm).