Hi all,
There's been a new version of Test::Class coming 'real soon' for a few
months now :-)
Amongst the bug fixes and extensions I've been considering a couple of
changes that I'm not 100% on and would appreciate any comments /
feedback / abuse on offer... it's late so apologies if this makes little
sense.
Currently, if you don't specify the number of tests for a test method
it assumes the method will run a single test. You can also specify the
number of tests explicitly, or say 'no_plan' if it runs an arbitrary
number of tests.
For example:
sub one_test : Test { ok(1==1) };
sub another_test: Test(1) { ok(1==1) };
sub two_tests : Test(2) { ok(1==1); ok(2==2) };
sub n_tests : Test(no_plan) { ok(1==1) while rand(100) > 5 };
Test::Class methods that manipulate the number of tests take and
return integers or the string 'no_plan', for example:
die "undetermined # tests" if $Tests->num_tests eq 'no_plan';
I'm considering two changes.
a) Test methods default to an arbitrary number of tests.
b) Use undef rather than 'no_plan'
This gives us:
sub one_test : Test(1) { ok(1==1) };
sub two_tests : Test(2) { ok(1==1); ok(2==2) };
sub n_tests : Test { ok(1==1) while rand(100) > 5
};
sub n_more_tests: Test(undef) { ok(1==1) while rand(100) > 5 };
and
die "undetermined # tests" unless $Tests->num_tests;
Why change:
- Seems more "perlish"... compare and contrast:
my $foo; sub foo : Test {};
my $foo = undef; sub foo : Test(undef) {};
my $foo = 1; sub foo : Test(1) {};
my $foo = 2; sub foo : Test(2) {};
- The 'no_plan' in Test::Class isn't the same concept as the 'no_plan'
in Test::Builder... some people have found the identical naming confusing.
- "undef" seems a nice shorthand for "undefined number of tests"
- No more messy "eq 'no_plan'"
- Makes it simpler for people who prefer the 'no_plan' style of testing
- Typing "(1)" isn't too much effort and makes the # tests explicit.
- In hindsight, having a 1 test default was probably a hangover from
JUnit thinking... I never really considered any alternatives.
Reasons not to change:
- I have to go back and re-write the Test::Class::Tutorial I've mostly
finished writing... grrrr...
- I think that a test suite with a known number of tests is a Good
Thing. Making the default number of tests for a method undetermined runs
against the grain a bit.
- It's not backwards compatible
Opinions?
(Oh yes, I just noticed when reading over my Test::Class mail to compose
this message that Mr Schwern said in one of his e-mails on Test::Class
> Make no_plan the default? Works for Test::Inline.
....guess I should have paid more attention ;-)
Cheers,
Adrian