use strict; use warnings; use Test::More 'no_plan'; use vars qw($class @names); BEGIN { $class = 'Dwarfs'; @names = qw( Doc Grumpy Happy Sneezy Bashful Sleepy Dopey ); use_ok($class) or BAIL_OUT('Cannot load module'); } my @dwarfs = (); # random birthday (date) sub bday { return sprintf '%d-%02d-%02d', 1930 + int rand 50, 1 + int rand 12, 1 + int rand 28; } # random height (cm) sub height { return 50 + int rand 70; } { # invalid creators my $dwarf; $dwarf = eval { $class->new }; is( $dwarf, undef, 'Invalid params' ); $dwarf = eval { $class->new( foo => 'bar' ) }; is( $dwarf, undef, 'Invalid params' ); } for my $name (@names) { my $dwarf = $class->new( name => $name, birthday => bday(), height => height() ); is(ref $dwarf, $class, "Dwarf '$name' born."); push @dwarfs, $dwarf; cmp_ok($dwarf->id, '==', scalar @dwarfs, 'ID auto-incremented.'); is($dwarf->birthday->as_iso, $dwarf->birthday, 'Birthday inflated'); }