Redefining inheritance?

C

Caleb Tennis

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"
 
J

jason r tibbetts

Caleb said:
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.
 
R

Robert Klemme

jason r tibbetts said:
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
 
C

Caleb Tennis

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.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,744
Messages
2,569,484
Members
44,903
Latest member
orderPeak8CBDGummies

Latest Threads

Top