[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Redefining inheritance?

Caleb Tennis

5/6/2005 5:47:00 PM

Suppose I have this:

class A
class B < A

Now, in my unit tests, I create a mock object to use for testing purposes:

class MockA < A

What I need now is a MockB, which inherits from MockA

class MockB < MockA

But I still need all of the methods which I have previous defined inside
of B. Note that MockB doesn't have any relation to the actual B, unless I
go back and redefine all of these methods within MockB itself.

So, is there a way I can create a "MockB < B", but dynamically make "B
inherit from MockA instead of the real A"



3 Answers

jason r tibbetts

5/6/2005 6:12:00 PM

0

Caleb Tennis wrote:
> Suppose I have this:
>
> class A
> class B < A
>
> Now, in my unit tests, I create a mock object to use for testing purposes:
>
> class MockA < A
>
> What I need now is a MockB, which inherits from MockA
>
> class MockB < MockA
>
> But I still need all of the methods which I have previous defined inside
> of B. Note that MockB doesn't have any relation to the actual B, unless I
> go back and redefine all of these methods within MockB itself.
>
> So, is there a way I can create a "MockB < B", but dynamically make "B
> inherit from MockA instead of the real A"

Do your mock classes define their own tests? If not, I'm not sure why
you'd need MockB to extend MockA, and certainly not B to extend MockA.
Make MockB extend B, which in turn extends A. If you really /must/ have
MockB extend MockA, you could wrap an instance of the latter inside the
former.



Robert Klemme

5/6/2005 6:40:00 PM

0


"jason r tibbetts" <tibbettj@verdi.iisd.sra.com> schrieb im Newsbeitrag
news:427BB35D.9050906@verdi.iisd.sra.com...
> Caleb Tennis wrote:
>> Suppose I have this:
>>
>> class A
>> class B < A
>>
>> Now, in my unit tests, I create a mock object to use for testing
>> purposes:
>>
>> class MockA < A
>>
>> What I need now is a MockB, which inherits from MockA
>>
>> class MockB < MockA
>>
>> But I still need all of the methods which I have previous defined inside
>> of B. Note that MockB doesn't have any relation to the actual B, unless
>> I
>> go back and redefine all of these methods within MockB itself.
>>
>> So, is there a way I can create a "MockB < B", but dynamically make "B
>> inherit from MockA instead of the real A"
>
> Do your mock classes define their own tests? If not, I'm not sure why
> you'd need MockB to extend MockA, and certainly not B to extend MockA.
> Make MockB extend B, which in turn extends A. If you really /must/ have
> MockB extend MockA, you could wrap an instance of the latter inside the
> former.

.... or use modules instead. Hint: you can create instances with #alloc
avoiding standard initialization.

module MockA
end

module MockB
include MockA
end

tester = B.alloc
tester.extend MockB
....

Kind regards

robert

Caleb Tennis

5/6/2005 6:44:00 PM

0


> Do your mock classes define their own tests? If not, I'm not sure why
> you'd need MockB to extend MockA, and certainly not B to extend MockA.
> Make MockB extend B, which in turn extends A. If you really /must/ have
> MockB extend MockA, you could wrap an instance of the latter inside the
> former.

A defines some methods which need to be overwritten during tests, which is why
I have a MockA. B needs the same set of methods overwritten during its unit
tests, so I end up needing a MockB which needs to grab the same overrides
that were in A.

I ended up just redefining the methods directly in A (thus, now no MockA is
ever created) within the unit test file and did some aliasing to make it
work. Thanks for the reply, though.