On Mon, Jul 18, 2005 at 09:42:06AM -0400, Brett Sanger wrote:
> Currently I have a directory tree, and my testing consists of running
> prove on one .t file, a directory, or recursively over all.  I don't
> seem to have a means of controlling the order of tests without using the
> shell.  (i.e. "prove" will run the tests in whatever order it pleases.
> "prove *" will run them in asciibetical order)  Is that true?

Simplest way to address this is to write a wrapper around prove.  Then
you can sort any way you want or use Test::Manifest or whatever.

        #!/usr/bin/perl -w

        my @switches = grep /^-/,  @ARGV;
        my @tests    = grep !/^-/, @ARGV;
        my @tests = sort_files_however(@tests);
        system("prove", @switches, @tests);

Or you can skip prove and just use Test::Harness::runtests().  prove is
just a fancy wrapper around that.


> There are some tests that I would love to have abort as soon as they
> fail. (If step 3 failed, then steps 4 and 5 are places I don't want to
> go)  Is there a way to make prove do this?  I skimmed the
> Test::Builder docs, in case I was going to have to roll my own
> prove-like tool, and didn't see an obvious call there either.

If you mean to abort the running of all further tests and test files, the
function you want is BAIL_OUT() which was added to Test::More in 0.60_01.
Its a very simple function and you can read about it here.

http://search.cpan.org/dist/Test-Harness/lib/Test/Harness/TAP.pod#Bail_out!


> I have some related tests.  For example, to test the account management
> of our LDAP administration tools on the website, I have a test to create
> an account, test various edit options, then delete the account.  (This
> is testing the create and delete as well, so I don't want to use an
> existing account).  This means that I either write a very large,
> monolithic .t file which reduces my ability to testing single functions
> of the interface, or I write separate .t files for each function.  In
> the latter case, I have to either be sure to run the create in the
> beginning and the delete at the end (see prove and order of tests at the
> start of this email) or I have to copy the create and delete code into
> each tests, making maintenance harder.  Is there a common way to
> modularize code in test files?  Is this just a "do" call?

Test::Class handles this well.  Or you can write testing libraries,
throw them into t/lib, stick "use 't/lib'" into your .t files and use
your custom testing libraries as normal.


-- 
Michael G Schwern     [EMAIL PROTECTED]     http://www.pobox.com/~schwern
You are wicked and wrong to have broken inside and peeked at the
implementation and then relied upon it.
        -- tchrist in <[EMAIL PROTECTED]>

Reply via email to