[rspec-users] Can I use mocking in this way?

Matt Wynne matt at mattwynne.net
Sun Apr 4 05:33:08 EDT 2010


When I started programming Ruby and I wanted abstract classes I would  
raise an exception in the initialize method telling the client that  
they were trying to instantiate an abstract class. That was my best  
attempt at self-documenting code at the time.

Nowadays, however, when I have behaviour that is abstract, I just put  
it in a module. That feels like much more idiomatic Ruby.

On 4 Apr 2010, at 05:00, David Chelimsky wrote:

> On Sat, Apr 3, 2010 at 10:45 PM, Julian Leviston  
> <julian at leviston.net> wrote:
>>
>> On 04/04/2010, at 7:32 AM, David Chelimsky wrote:
>>
>>> On Sat, Apr 3, 2010 at 8:56 AM, Vojto Rinik <zero0xxx at gmail.com>  
>>> wrote:
>>>> Hello RSpec users!
>>>> I have one abstract class and a few classes that inherit from  
>>>> that abstract
>>>> one.
>>>
>>> Ruby doesn't have abstract classes. You can have a base class that  
>>> you
>>> don't _intend_ to instantiate directly, but there's nothing stopping
>>> you from doing so, so it's not like an abstract class in java, which
>>> you actually can't instantiate directly.
>>>
>>> I've seen some cases where the initialize method is made private so
>>> you can't just call Foo.new, so it sort of feels like an abstract
>>> class, but even in that case you can still use send() to instantiate
>>> one in a test:
>>>
>>>  AbstractIshClass.send(:new)
>>>
>>
>> How about if you overrode new and __new__ ?
>
> Then override the override. AFAIK, there's really no preventing a
> client from using an object however it chooses in Ruby. You can make
> it difficult, but I'm pretty sure there's always a way around it.
> _______________________________________________
> rspec-users mailing list
> rspec-users at rubyforge.org
> http://rubyforge.org/mailman/listinfo/rspec-users

cheers,
Matt

http://mattwynne.net
+447974 430184



More information about the rspec-users mailing list