Beefy Boxes and Bandwidth Generously Provided by pair Networks
The stupid question is the question not asked
 
PerlMonks  

Re^3: Is "ref($class) || $class" a bad thing?

by chromatic (Archbishop)
on Jul 12, 2004 at 19:52 UTC ( [id://373708]=note: print w/replies, xml ) Need Help??


in reply to Re^2: Is "ref($class) || $class" a bad thing?
in thread Is "ref($class) || $class" a bad thing?

I'm suggesting (as I think your conclusion supports) that if you have to abuse your API to test the possibilities that your code should support, you have a mismatch somewhere.

There are reasons to call methods as subroutines in tests, but those are rare. If you've not violated Liskov substitutability, you can probably subclass appropriately. (If you have violated LSP, you should rethink your design. :)

Replies are listed 'Best First'.
Re^4: Is "ref($class) || $class" a bad thing?
by stvn (Monsignor) on Jul 12, 2004 at 20:42 UTC
    I'm suggesting (as I think your conclusion supports) that if you have to abuse your API to test the possibilities that your code should support, you have a mismatch somewhere.

    Well, if you want to support Foo::new() then it would not be abusing the API, it would be testing a feature. If you want to punish those who abuse your API, then I think it is appropriate to test it for the error/exception.

    However, if test it because you just want 100% coverage, then you probably just need to relax.

    I guess my feeling is that I want to punish those who abuse my API, maybe that is not so perl-ish, and maybe its a little control-freaky, but I like knowing that my module will perform as expected under both intended and unintended conditions.

    -stvn

      That's the part that confuses me. What does the "class or object method?" check in the constructor have to do with the "method or function call?" question?

      I think these are two different things altogether, but the original post and your previous comment here make me wonder if you think they're different.

        That's the part that confuses me. What does the "class or object method?" check in the constructor have to do with the "method or function call?" question?

        Because a common idiom used to "solve" the "class or object method?" question, can lead to odd behavior when a constructor is called as a function and not a method. Sure, in a perfect world that should never happen, but we dont live in a perfect world, and it would be niave to think your code would execute in a perfect world. Of course, you could also just not care, if they use it wrong, you absolve yourself of all responsability, it's their fault. But I am really talking about defensive coding practices here, ways to strengthen your code in real world scenarios so that it acts as expected in all situations, even those of incorrect usage.

        I think these are two different things altogether, but the original post and your previous comment here make me wonder if you think they're different.

        They are different things conceptually, but in reality they are 2 different "facets" of the same code. One the intended usage, the other, the un-indentend usage. Again, I am talking defensive coding here, if you don't care what happens when someone mis-uses your code, then this doesn't matter. Personally, I do care.

        -stvn

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others drinking their drinks and smoking their pipes about the Monastery: (5)
As of 2024-03-29 13:58 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found