EasyMock: Void Methods
easymock, java, mocking, unit-testing, void
Solution
If I understand what you want to do correctly, you should be able to use `andAnswer()`:
mockObject.someMethod(eq(param1), eq(param2));
expectLastCall().andAnswer(new IAnswer() {
public Object answer() {
//supply your mock implementation here...
SomeClass arg1 = (SomeClass) getCurrentArguments()[0];
AnotherClass arg2 = (AnotherClass) getCurrentArguments()[1];
arg1.doSomething(blah);
//return the value to be returned by the method (null for void)
return null;
}
});
The EasyMock User Guide explains:
Creating Return Values or Exceptions
Sometimes we would like our mock object to return a value or throw an exception that is created at the time of the actual call. Since EasyMock 2.2, the object returned by `expectLastCall()` and `expect(T value)` provides the method `andAnswer(IAnswer answer)` which allows [you] to specify an implementation of the interface `IAnswer` that is used to create the return value or exception.
Inside an `IAnswer` callback, the arguments passed to the mock call are available via `EasyMock.getCurrentArguments()`. If you use these, refactorings like reordering parameters may break your tests. You have been warned.
Problem
I have a method that returns void in a class that is a dependency of the class I want to test. This class is huge and I'm only using this single method from it. I need to replace the implementation of this method for the test as I want it to do something different and I need to be able to access the parameters this method receives. I cannot find a way of doing this in EasyMock. I think I know how to do it with Mockito by using `doAnswer` but I don't want to add another library unless absolutely necessary.