NAME Test::Suite::Manual - A more modern testing framework for perl DESCRIPTION Test-Suite is a test framework that addresses several complains I have heard, or have myself issued forth about perl testing. It is still based off Test::Builder and uses a lot of existing test tools. Please see Test::Suite::Specification for more details. EARLY VERSION WARNING This is VERY early version. Test::Suite does not run yet. Please go to to see the latest and greatest. SYNOPSYS Lets assume you have a module My::Module, to write a test object for it you can create lib/My/TEST/Module.pm or ts/My/Module.pm. If in the ts/ directory you should prefix the package name with TEST:: package TEST::My::Module; Both package names are listed: package My::TEST::Module; use strict; use warnings; use Test::Suite testing => 'My::Module', random => 1; #Randomize tests (on by default) our $GLOBAL; # You can also call it initialize if you prefer long names. # This will only be run once, prior to the first test case. sub init { my $self = shift; $self->do_stuff; } # Define a test case test_case ALL_PASS => sub { my $self = shift; $GLOBAL = 1; }; # Define another test case just as a sub. sub case_MORE_PASS { my $self = shift; $GLOBAL = 1; } test_case advanced => ( method => \&_do_advanced, todo => "These will all fail because GLOBAL is 0", ... ); sub _do_advanced { $GLOBAL = 0 } # Define a test set, this will be run once per case test_set SET_A => sub { my $self = shift; ok( $GLOBAL, "Testing GLOBAL" ); is( $GLOBAL, 1, "Testing GLOBAL again" ); }; # Define another set set_SET_B => sub { my $self = shift; ok( $GLOBAL > 0, "Global is positive" ); ok( $GLOBAL != 0, "Global is not zero" ); }; test_set advanced => ( method => sub { $GLOBAL = 0 }, todo => 'global is 0, these fail.', ... ); 1; TOOLS $ prove_suite Command line to to run the test suite. *** This utility is not yet complete *** PLUGINS Plugins are used to provide new functionality for the test writer. For instance all the functionality of Test::More, Test::Exception::LessClever, Test::Warn and Test::Simple are provided by plugins. If you want to add new tester or utility functions for use in test modules you may do so in a plugin. To create a plugin create a module directly under the Test::Suite::Plugin namespace. Define testers and utilies. package Test::Suite::Plugin::MyPlugin; use strict; use references; use Test::Suite::Plugin; # define a util function util my_diag => sub { Test::Suite->diag( @_ ) }; # define a tester tester my_ok => ( min_args => 1, max_args => 2, code => sub { my ( $result, $name ) = @_; return ( $result ? 1 : 0, $name ); }, ); # Define one with a prototype tester my_dies_ok => sub(&;$) { eval $_[0]->() || return ( 1, $_[1]); Test::Suite->diag( "Test did not die as expected" ); return ( 0, $_[1] ); }; 1; Look at Test::Suite::TestHelper and Test::Suite::Plugin for information on testing plugins. WRAPPER PLUGINS Plugins can be made to wrap around existing Test::Builder based testing utilities. This is how Test::More and Test::Warn functionality is provided. Here is the Test::More wrapper plugin as an example. package Test::Suite::Plugin::More; use strict; use warnings; use Test::Suite::Plugin; our @SUBS; BEGIN { @SUBS = qw/ is isnt like unlike cmp_ok is_deeply can_ok isa_ok /; } use Test::More import => \@SUBS; tester $_ => $_ for @SUBS; util diag => sub { Test::Suite->diag( @_ ) }; util todo => sub(&$) { my ( $code, $todo ) = @_; local $Test::Suite::Plugin::TODO = $todo; $code->(); }; 1; AUTHORS Chad Granum exodist7@gmail.com COPYRIGHT Copyright (C) 2010 Chad Granum Test-Suite is free software; Standard perl licence. Test-Suite is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the license for more details.