Test::Strict - Check syntax, presence of use strict; and test coverage
Test::Strict
lets you check the syntax, presence of use strict;
and presence use warnings;
in your perl code.
It report its results in standard Test::Simple
fashion:
use Test::Strict tests => 3; syntax_ok( 'bin/myscript.pl' ); strict_ok( 'My::Module', "use strict; in My::Module" ); warnings_ok( 'lib/My/Module.pm' );
Module authors can include the following in a t/strict.t
and have Test::Strict
automatically find and check
all perl files in a module distribution:
use Test::Strict; all_perl_files_ok(); # Syntax ok and use strict;
or
use Test::Strict; all_perl_files_ok( @mydirs );
Test::Strict
can also enforce a minimum test coverage
the test suite should reach.
Module authors can include the following in a t/cover.t
and have Test::Strict
automatically check the test coverage:
use Test::Strict; all_cover_ok( 80 ); # at least 80% coverage
or
use Test::Strict; all_cover_ok( 80, 't/' );
The most basic test one can write is "does it compile ?".
This module tests if the code compiles and play nice with Test::Simple
modules.
Another good practice this module can test is to "use strict;" in all perl files.
By setting a minimum test coverage through all_cover_ok()
, a code author
can ensure his code is tested above a preset level of kwality throughout the development cycle.
Along with Test::Pod, this module can provide the first tests to setup for a module author.
This module should be able to run under the -T flag for perl >= 5.6.
All paths are untainted with the following pattern: qr|^([-+@\w./:\\]+)$|
controlled by $Test::Strict::UNTAINT_PATTERN
.
Run a syntax check on $file
by running perl -c $file
with an external perl interpreter.
The external perl interpreter path is stored in $Test::Strict::PERL
which can be modified.
You may prefer use_ok()
from Test::More to syntax test a module.
For a module, the path (lib/My/Module.pm) or the name (My::Module) can be both used.
Check if $file
contains a use strict;
statement.
This is a pretty naive test which may be fooled in some edge cases. For a module, the path (lib/My/Module.pm) or the name (My::Module) can be both used.
Check if warnings have been turned on.
If $file
is a module, check if it contains a use warnings;
or use warnings::...
statement.
However, if the perl version is <= 5.6, this test is skipped (use warnings
appeared in perl 5.6).
If $file
is a script, check if it starts with #!...perl -w
.
If the -w is not found and perl is >= 5.6, check for a use warnings;
or use warnings::...
statement.
This is a pretty naive test which may be fooled in some edge cases. For a module, the path (lib/My/Module.pm) or the name (My::Module) can be both used.
Applies strict_ok()
and syntax_ok()
to all perl files found in @directories
(and sub directories).
If no <@directories> is given, the starting point is one level above the current running script,
that should cover all the files of a typical CPAN distribution.
A perl file is *.pl or *.pm or *.t or a file starting with #!...perl
If the test plan is defined:
use Test::Strict tests => 18; all_perl_files_ok();
the total number of files tested must be specified.
You can control which tests are run on each perl site through:
$Test::Strict::TEST_SYNTAX (default = 1) $Test::Strict::TEST_STRICT (default = 1) $Test::Strict::TEST_WARNINGS (default = 0) $Test::Strict::TEST_SKIP (default = []) "Trusted" files to skip
This will run all the tests in @t_dirs
(or current script's directory if @t_dirs is undef)
under Devel::Cover
and calculate the global test coverage of the code loaded by the tests.
If the test coverage is greater or equal than coverage_threshold
, it is a pass,
otherwise it's a fail. The default coverage threshold is 50
(meaning 50% of the code loaded has been covered by test).
The threshold can be modified through $Test::Strict::COVERAGE_THRESHOLD
.
You may want to select which files are selected for code
coverage through $Test::Strict::DEVEL_COVER_OPTIONS
,
see Devel::Cover for the list of available options.
The default is '+ignore,"/Test/Strict\b"'.
The path to cover
utility can be modified through $Test::Strict::COVER
.
The 50% threshold is a completely arbitrary value, which should not be considered as a good enough coverage.
The total coverage is the return value of all_cover_ok()
.
For all_cover_ok()
to work properly, it is strongly advised to install the most recent version of Devel::Cover
and use perl 5.8.1 or above.
In the case of a make test
scenario, all_perl_files_ok()
re-run all the tests in a separate perl interpreter,
this may lead to some side effects.
Test::More, Test::Pod. Test::Distribution, Test:NoWarnings
Pierre Denis, <pierre@itrelease.net>
.
Copyright 2005, Pierre Denis, All Rights Reserved.
You may use, modify, and distribute this package under the same terms as Perl itself.