EasyMock: supplying arguments you don't know at compile-time
Using the latest version of EasyMock, I have a method that I need to stub out. The method takes an object parameter and returns void.
The stubbed method is being called by the method I'm testing. No surprises there. My difficulty is that the o开发者_如何学Gobject that is supplied as an argument to the mocked method is being created by the method I'm testing.
I know I can get around this using createNiceMock()
but is there a way to explicitly stub out this method?
Sample code:
public interface IMockMe {
void doSomething(InnerObj obj);
}
public class TestMe {
IMockMe mockMe;
public void testThisMethod() {
InnerObj obj = new InnerObj();
mockMe.doSomething(obj);
}
}
class Tester {
@Test
public void testThatDarnedMethod() {
IMockMe mocked = EasyMock.create(IMockMe.class);
mocked.doSomething( /* what goes here? */);
EasyMock.expectLastCall();
TestMe testMe = new TestMe(mocked);
testMe.testThisMethod();
}
}
Have a look at the "Flexible Expectations with Argument Matchers" section of the EasyMock documentation. Sample from the documentation:
String[] documents = new String[] { "Document 1", "Document 2" };
expect(mock.voteForRemovals(aryEq(documents))).andReturn(42);
The aryEq(documents)
is a call which creates a matcher which will match any array with the right contents, rather than matching by identity.
In your case, you may want the anyObject()
matcher.
精彩评论