Beefy Boxes and Bandwidth Generously Provided by pair Networks
Do you know where your variables are?
 
PerlMonks  

Re: Test::Exception extension with (evil?) overloading

by Aristotle (Chancellor)
on Jan 18, 2003 at 16:41 UTC ( [id://227988]=note: print w/replies, xml ) Need Help??


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

my $result = lives_ok {$o->answer} 'answer worked'; is $result, 42, 'answer returned 42';
Depending on what semantics you intend, this simple case seems to be adequately covered by either: is eval { $o->answer }, 42, 'answer returned 42'; or
is do { lives_ok {$o->answer} 'answer worked' }, 42, 'answer returned 42';

The former treats the exception and is as a single test, the latter as two separate ones.

I looked at your Test::Exception and don't see any other tests that make sense to combine with a Test::More test.

So I'd say what you should do is document these memes in your POD rather than writing any code.

Makeshifts last the longest.

Replies are listed 'Best First'.
Re^2: Test::Exception extension with (evil?) overloading
by adrianh (Chancellor) on Jan 18, 2003 at 17:45 UTC
    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.

      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';

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://227988]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others scrutinizing the Monastery: (6)
As of 2024-04-23 20:29 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found