#!perl -T use strict; use warnings; BEGIN { use lib 't'; use MyTestHelper; use Test::More; # check some external dependencies (programs and non # CPAN modules my ($skip,$msg) = MyTestHelper::skip_all(); plan skip_all => $msg if $skip; } our %features = ( A => 72, B => 148, C => 43, D => 34, ); my $number_tests; foreach ( keys %features ) { $number_tests += $features{$_}; } plan tests => $number_tests; use English qw( -no_match_vars ); use Scalar::Util qw/refadr/; use Data::Dumper; use MyModule; my $obj = MyModule->new(); FEATURE: foreach my $feature ( sort keys %features ) { SKIP: { if ( $obj->does_not_like($feature) { skip "Feature not available", $features{$feature}; } # FINALLY, the tests ... } } #### package MyTestFramework; use base 'Test::SimpleFramework'; sub init { my ( $self ) = @_; $self->set_strict(1); $self->set_warnings(1); $self->export({ 'Scalar::Util' => 'refaddr', 'English' => '-no_match_vars', 'Data::Dumper' => undef, 'MyModule' => undef, }); $self->dependencies({ 'lftp binary in path' => $self->in_path('lftp'), 'non-CPAN module' => $self->in_inc('Non::Cpan'), }); } our @EXPORT = qw( delete_temporary_files ); sub delete_temporary_files { foreach my $file ( ) { my ( $filename ) = $file =~ m{\A t/tmp/ ([\d\w\.\-]+) \z}xms; unlink "t/tmp/$filename"; } } #### #perl -T BEGIN{ use lib 't'; }; use MyTestFramework; # skips all tests if one dependency was't found check_dependencies(); register_features({ A => 72, B => 148, C => 43, D => 34, }); my $obj = MyModule->new(); while (my $feature = next_feature) { skip_feature if $obj->does_not_like($feature->name); # the tests ... # dies if number of tests for feature is not correct } delete_temporary_files();