Let's get rid of classes? :)

2011/7/18 Carlo <[email protected]>

> 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

Reply via email to