NAME
Test::Block - specify fine granuality test plans
SYNOPSIS
use Test::More 'no_plan';
use Test::Block;
{
# This block should run exactly two tests
my $block = Test::Block->expecting(2);
ok(1);
ok(1);
};
SKIP: {
# This block should run exactly three tests
my $block = Test::Block->expecting(3);
ok(1);
skip "skip remaining tests in block", $block->remaining;
};
DESCRIPTION
This module allows you to specify the number of expected tests at a
finer level of granuality than an entire test script. It is built with
Test::Builder and plays happily with Test::More and friends.
If you are not already familiar with Test::More now would be the time to
go take a look.
expecting
You create a Test::Block object with the "expecting" class method,
specifying the number of tests. When the object is destroyed it
creates a failed test if the expected number of tests have not run.
For example doing:
{
my $block = Test::Block->expecting(3);
ok(1);
# oops - missed two tests out
}
will produce
ok 1
not ok 2 - block expected 3 test(s) and ran 1
remaining
You can find out the number of remaining tests in the block by
calling the "remaining" method on the object. This can be useful in
"SKIP" blocks, for example:
SKIP: {
my $block = Test::Block->expecting(5);
my $pig = Pig->new;
isa_ok($pig, 'Pig')
|| skip "cannot breed pigs", $block->remaining;
can_ok($pig, 'takeoff')
|| skip "pigs don't fly here", $block->remaining;
ok($pig->takeoff, 'takeoff')
|| skip "takeoff failed", $block->remaining;
ok( $pig->altitude > 0, 'Pig is airborne' );
ok( $pig->airspeed > 0, ' and moving' );
};
If you run this test in an environment where "Pig->new" worked and
the takeoff method existed, but failed when ran, you would get:
ok 1 - The object isa Pig
ok 2 - can takeoff
not ok 3 - takeoff
ok 4 # skip takeoff failed
ok 5 # skip takeoff failed
BUGS
None known at the time of writing.
If you find any please let me know by e-mail, or report the problem with
.
TO DO
Nothing at the time of writing.
If you think this module should do something that it doesn't do at the
moment please let me know.
ACKNOWLEGEMENTS
Thanks to chromatic and Michael G Schwern for the excellent
Test::Builder, without which this module wouldn't be possible.
Thanks to Michael G Schwern and Tony Bowden for the mails on
perl-qa@perl.org that sparked the idea for this module.
AUTHOR
Adrian Howard
If you can spare the time, please drop me a line if you find this module
useful.
SEE ALSO
Test::Builder provides a consistent backend for building test libraries.
The following modules are all built with Test::Builder and work well
together.
Test::Simple & Test::More
Basic utilities for writing tests.
Test::Class
Easily create test classes in an xUnit style. Test::Class allows you
to specify the number of tests on a method-by-method basis.
LICENCE
Copyright 2003 Adrian Howard, All Rights Reserved.
This program is free software; you can redistribute it and/or modify it
under the same terms as Perl itself.