http://www.perlmonks.org?node_id=228003


in reply to Re: Test::Exception extension with (evil?) overloading
in thread Test::Exception extension with (evil?) overloading

is eval { $o->answer }, 42, 'answer returned 42'

I've used this on occasion, but I've three issues with the idiom. First, when undef is a legal return value it's of no use. Second, you don't get to see the error message on failure. Third, you can't tell the difference between failure due to an exception and failure due to returning undef.

is do { lives_ok {$o->answer} 'answer worked' }, 42, 'answer returned 42';

We're back to two tests - and it doesn't work :-)

... but only because I lied in my example... bad adrian...

lives_ok returns a boolean, not the result of the coderef. This is usual for test subroutines so that you can use the do_some_test(...) || diag(some message) idiom.

Replies are listed 'Best First'.
Re^3: Test::Exception extension with (evil?) overloading
by Aristotle (Chancellor) on Jan 18, 2003 at 17:52 UTC
    Then what was the following code you posted supposed to do anyway?
    my $result = lives_ok {$o->answer} 'answer worked'; is $result, 42, 'answer returned 42';
    Because the second snippet I posted behaves exactly like that.

    Makeshifts last the longest.

      Then what was the following code you posted supposed to do anyway?

      I guess it was intended to prove what an idiot I am when I don't run my code examples. Excuse me while I go bang my head against the wall (and then fix the example :-).

      <bang, bang, bang ... >

      Ah, that's better. Example should read:

      my $result; lives_ok {$result = $o->answer} 'answer worked'; is $result, 42, 'answer returned 42';