In a test script, tests may build up intermediate results which later tests depend upon. Imagine the following interacts with a web service so if something fails you don't want to waste time making network calls to execute stuff which will fail anyway.
\,,,/ (o o) ------oOOo-(_)-oOOo------ use strict; use warnings; package Huhu; sub new { return bless {}, __PACKAGE__ } sub token { return 'abcd' } sub nekot { return join '', reverse split //, $_[1] } package main; use Test::More; my $hu = Huhu->new; my $tkn = $hu->token; # (1) Can't carry on without the token like $tkn, qr/abc/; # (2) Useless carrying on if this fails. my $tk2 = $hu->nekot( $tkn ); is $tk2, 'dcba'; done_testing; ------------------------- I know of three ways to handle conditional test execution: * SKIP blocks * die() calls * BAILOUT calls After (1), I could use a SKIP block to skip past the remaining test in the event that I haven't received a token. But then, would I code another nested SKIP block to handle the failure of (2) to prevent (3) from executing? I could simply call die() to prevent this script from further execution. This seems to be the best way to me. (But I'm not sure it is.) I could call BAILOUT, but this would end the entire test suite. This might not be what I want. Could anyone give me advice on what's the Perl testing philosophy here? To reframe the question in a more general way: How would you organize test dependencies into units of execution, and scopes to allow leaving those modules in the event their continued execution after a failure doesn't make sense? (Not sure I made myself clear.) -- Michael Ludwig