* Paul LeoNerd Evans <[EMAIL PROTECTED]> [2006-12-31 01:05]:
> Whereas, if I want to use the module, I have to first note that
> it isn't standard install, so I should start the test with
> something like:
> 
>     eval { require Test::Exception; import Test::Exception; };
>     my $can_test_exception = $@ ? 0 : 1;
> 
> Then each test that might use it should be:
> 
>     SKIP: {
>         skip "No Test::Exception", 1 unless $can_test_exception;
> 
>         dies_ok( sub { code() },
>                  'An exception is raised' );
>     }

You’re not using enough magic. If you *really* want to make your
tests run even if Test::Exception isn’t installed, stick the test
in a BEGIN block that conditionally installs a `dies_ok` stub.
Something like

    BEGIN {
        unless( eval "use Test::Exception; 1" ) {
            *dies_ok = sub { SKIP: {
                skip "Need Test::Exception for: $_[1]", 1;
            } };
        }
    }

Something like that anyway; untested.

> So, a lot more code, to achieve the same end result... Plus,
> I'm now in the situation where if Test::Exception isn't
> installed, the test won't be run at all.

Well yes. The same can be said of relying on *any* module
whatsoever; you can always “just” reimplement the functionality
in your code and not have to rely on the module.

You don’t need Test::Exception to test exception-throwing, but if
you need to test a lot of that, then Test::Exception will make
your tests a *whole* lot more readable.

(Actually, I’d argue that it should be merged into Test::More
someday… too cheap in terms of code complexity and at the same
time too useful to make people decide whether they want a new
dependency just to get it.)

Regards,
-- 
Aristotle Pagaltzis // <http://plasmasturm.org/>

Reply via email to