[Pdx-pm] interesting testing hole thats been dug

Eric Wilhelm scratchcomputing at gmail.com
Thu Jan 4 11:58:18 PST 2007


# from Michael G Schwern
# on Thursday 04 January 2007 11:20 am:

>Wil Cooley wrote:
>>  It obviously doesn't make sense to
>> require $obj->isa('Net::FTP'), because with duck-typing it doesn't
>> actually have to be a subclass.  How thoroughly should I test with
>> $obj->can() for the object's abilities?
>
>Your code already does all the checking it needs by calling methods on
> $obj.  About all ->can is going to buy you is a nicer error message,
> but then you have to keep a duplicate list of all the methods your
> code calls on $obj.  Its up to how lax or strict you want to be. 
> Since you're allowing duck-typing you're probably lax.

I agree that keeping a duplicate list of all of the methods isn't the 
way to go unless you can easily auto-generate it -- even then, it might 
be more strict than is actually needed.

I think there's usefullness in doing one check for 'get' or other 
similarly characteristic/indispensible method, just as a general early 
run-time sanity check (to be reasonably sure it's not a Shovel.pm 
object.)  Let the rest fail later with the 'Can't locate object method 
"foo"...' stock error.  This will make development easier, since the 
duck only needs to support what gets called on it in any given 
prototype/hack.

The exception would be when you're dealing with a set of classes that 
have agreed on some standard or convention (ala the USB spec's "what 
sort of device are you?" scheme -- but even olympus managed to botch 
that by only testing their "I'm a mass sortage device" camera against 
windows where the spec-mandated question never got asked.)

--Eric
-- 
Peer's Law: The solution to the problem changes the problem.
---------------------------------------------------
    http://scratchcomputing.com
---------------------------------------------------


More information about the Pdx-pm-list mailing list