Velocity Reviews

Velocity Reviews (http://www.velocityreviews.com/forums/index.php)
-   Ruby (http://www.velocityreviews.com/forums/f66-ruby.html)
-   -   Redefining inheritance? (http://www.velocityreviews.com/forums/t821598-redefining-inheritance.html)

Caleb Tennis 05-06-2005 05:46 PM

Redefining inheritance?
 
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"




jason r tibbetts 05-06-2005 06:12 PM

Re: Redefining inheritance?
 
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 05-06-2005 06:40 PM

Re: Redefining inheritance?
 

"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 05-06-2005 06:43 PM

Re: Redefining inheritance?
 

> 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.




All times are GMT. The time now is 01:48 PM.

Powered by vBulletin®. Copyright ©2000 - 2014, vBulletin Solutions, Inc.
SEO by vBSEO ©2010, Crawlability, Inc.