Slash Boxes
NOTE: use Perl; is on undef hiatus. You can read content, but you can't post it. More info will be forthcoming forthcomingly.

All the Perl that's Practical to Extract and Report

The Fine Print: The following comments are owned by whoever posted them. We are not responsible for them in any way.
More | Login | Reply
Loading... please wait.
  • I like to use the argument done_testing accepts that lets you say how many tests you expected to have run at that stage.

    Its like specifying a plan, except you can do so pro grammatically after the fact, which eliminates the need for tedious manual counting.

    All you need to know is how many tests occur within a given block of code and increment your counter respectively.

    use Test::More;

    my $t;

    foreach ( list() ) {
      ok( $_, 'List member ok' );

    $t+=3; # list called the second time emits more items.
    foreach ( list() ) {
      ok( $_, 'List member ok' );

    done_testing( $t ); # $t is 5

    There's surely a better way to get the same effect.

    • /me-- # tiny bloody text box ==> me splits a word causing bad grammars.
    • There's surely a better way to get the same effect.

      Switch to Test::Class. I've an []extensive article on its use and best practices []. When nested TAP is finally stable, Adrian Howard has a new version available which utilizes it. It's much cleaner.

      • I've found that that Test::Class testing code is significantly harder to maintain that the "bunch of Perl scripts" of the regular way.

        That's just me though...

    • Yes, this seems the way to go to me, especially since I have been writing my tests like

          use Test::More;

          my $tests;

          BEGIN { $tests += 2 }
          for (list()) {
              ok $_, "List member ok";

          BEGIN { plan tests => $tests }

      for quite a while now. AFAIC done_testing($tests) simply removes the need for the ugly BEGIN blocks.

      The other thing I quite like about done_testing is that is removes the need for SKIP: bl