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


in reply to Re: When test-driven development just won't do
in thread When test-driven development just won't do

xdg wrote:

no strict 'refs'; ok( defined *{$CLASS."::".$method}{CODE}, "$CLASS has $method")

That fails badly for a number of reasons. If you're just testing a function, it's OK. If you're really testing whether a class provides a given method, it fails. For example, if you have an inherited method, your test fails even though the class "has" the method. Further, the method might no be inherited but also not yet installed in the symbol table, yet can() might be overridden to supply the method (I've had to do this for "load on demand" services.) If you have OO code, use Perl's OO facilities to work with it. Just peeking into the namespace isn't enough.

Cheers,
Ovid

New address of my CGI Course.

Replies are listed 'Best First'.
Re^3: When test-driven development just won't do
by xdg (Monsignor) on Aug 04, 2005 at 19:27 UTC

    You're absolutely right -- I wasn't intending to suggest it as a replacement for can_ok. I should have been clear that it's an example for when you want to see if code exists and is not inherited from a superclass (which is what I had needed to check at the time). Doesn't help identify when other modules have exported a function in, or for stuff handled with AUTOLOAD, or installed later, etc. All goes back to my point of needing clarity around what the actual question in before one knows how to write the test.

    -xdg

    Code written by xdg and posted on PerlMonks is public domain. It is provided as is with no warranties, express or implied, of any kind. Posted code may not have been tested. Use of posted code is at your own risk.