EasyMock Class Extension 2.0_Pre-Release Readme

Documentation for release 2.0_Pre-Release (August 21 2005)
© 2003-2005 OFFIS, Henri Tremblay.

The EasyMock Class Extension allows to generate Mock Objects for classes.

Requirements

The EasyMock Class Extension requires Java 5 or above, EasyMock 2.0, JUnit 3.8.1, cglib 2.1.0 (2.0.x also works but cannot mock a class without visible constructor) and asm (use the version that matches your cglib version, you can also use cglib-nodep-2.1 which includes asm)

Usage

To generate Mock Objects for classes and interfaces, use
import static org.easymock.classextension.EasyMock.*;
instead of
import static org.easymock.EasyMock.*;
You will then create a mock just like with EasyMock by doing something like this:
ToMock mock = createMock(ToMock.class);
From now on, you will use your mock just like you use to do with EasyMock. Note that createNiceMock, createStrictMock, createStrictControl, createControl and createNiceControl methods are also available. The create...Control() methods return org.easymock.classextension.IMocksControl, an extension of EasyMock's IMocksControl.

Advanced

Sometimes you may need to mock only some methods of a class and keep the normal behavior of others. This usually happens when you want to test a method that calls some others in the same class. So you want to keep the normal behavior of the tested method and mock the others.

In this case, the first thing to do is to consider a refactoring since most of the time this problem caused by a bad design. If it's not the case or if you can't do otherwise because of some development constraints, here's the solution.

ToMock mock = createMock(ToMock.class, 
   new Method[] { ToMock.class.getMethod("mockedMethod", null) } );

In this case only the methods passed to createMock will be mocked (mockedMethod() in the example). The others will still behave as they used to.

The class extension's IMocksControl also provides a createMock() method to create partial mocks.

Limitations

EasyMock Class Extension provides a built-in behavior for equals(), toString() and hashCode(). It means that you cannot record your own behavior for these methods. It is coherent with what EasyMock do. This limitation is considered as a feature that prevents you from having to care about these methods.

Final methods cannot be mocked. If called, their normal code will be executed.

Currently, only Sun JVM 5.0 is really well supported. By that I mean that you can mock any kind of classes. No constructor will be called to create the mock.

In the Advanced section, it was explained how to do partial mocking. One important thing is that private methods are never mocked. So if your method under test is calling some private methods, you will need to test them as well since you cannot mock them.

Authors

The EasyMock Class Extension has been developed by Joel Shellman, Henri Tremblay, and Chad Woolley on the files section of Yahoo!Groups. It is maintained and improved by Henri Tremblay.