Let's get rid of classes? :) 2011/7/18 Carlo <snoobabk@yahoo.ie>
Personally when I come across cases like this I either break the (usually public) method into a public and internal method, the internal method contains the date so we can test the edge cases.
E.g. MyClass>> doSomethingWorthTesting ... basicDoSomethingWorthTestingAt: DateAndTime now. ...
My test then uses the internal method for testing where I can pass in different dates.
Another option which you've probably decided against is to delegate to your current class or a Registry to ask for the class with which to use for date related tasks, a kind of factory in a way. MyClass>>>> doSomethingWorthTesting ... now := self class dateClass now. ...
I personally feel Pharo is moving into a more pluggable direction with the work on the environment (Smalltalk environment) where we can provide our own environment for a particular context, something similar to Newspeaks nested classes and imports using the usingPlatform: construct. E.g. class MyClassModule usingPlatform: platform = ( private DateAndTime = platform time DateAndTime. private Error = platform exceptions Error. )
Hmm maybe we can do a lightweight version using DynamicBindling library myEnvironmentBinding bindDuring: [ ...your testcase... ]
Cheers Carlo
On 17 Jul 2011, at 11:45 PM, Sean P. DeNigris wrote:
I keep coming up against this situation over and over in testing.
MyClass>>doSomethingWorthTesting ... now := DateAndTime now. ...
I want to control DateAndTime class>>now to make this test determinate and simulate interesting edge cases, but can't figure out a good way. In Ruby, I could easily stub it because it's not a live system (or use dependency injection), but here I don't want to mess with the real DateAndTime class in case something goes wrong and leaves my system dirty.
I really hate using dependency injection for this kind of thing (especially without Ruby's default parameter values). I've been creating MyClass>>now and stubbing that. Am I being paranoid, should I just hijack the real class and fix it when I'm done? What's the best way to do this?
Thanks. Sean
-- View this message in context: http://forum.world.st/Stubbing-class-side-methods-tp3674065p3674065.html Sent from the Pharo Smalltalk mailing list archive at Nabble.com.
-- Dennis Schetinin