* Nadim Khemir <[EMAIL PROTECTED]> [2007-01-30 18:20]:
>   # Check that a test runs without an exception
>   lives_and { is $foo->method, 42 } 'method is 42';
> Isn't this equivalent to is($foo->method, 42 , 'method is 42')?
> The test framework will catch the error if any. It's just
> weird to attempt to catch something when the expected result is
> to pass.

No. The framework won’t catch the exception and the test script
will die at that point. You would have to catch the exception
yourself, then check if you got one. To get the same effect as

    lives_and { ok die, "foo" };

you would have to write

    eval { ok die, "foo"; 0 } or do { fail; diag "died: $@" };

Note how layout-sensitive this code is. If you change it just a
bit, you will run different numbers of tests depending on whether
the exception gets thrown or not.

You could also always run two separate tests:

    local $@ = "";
    ok eval { die }, "foo";
    ok ! $@, "foo didn't die";

But that’s an extra test. `lives_and` removes all the headache
and makes sure you can write a semantically singular test as a
single test.

-- 
*AUTOLOAD=*_;sub _{s/(.*)::(.*)/print$2,(",$\/"," ")[defined wantarray]/e;$1}
&Just->another->Perl->hack;
#Aristotle

Reply via email to