What is the difference between this:
ResultSet set = EasyMock.createNiceMock(ResultSet.class);
EasyMock.expect(set.getInt("col1")).andReturn(1);
EasyMock.expect(set.wasNull()).andReturn(false);
EasyMock.expect(set.getInt("col2")).andReturn(2);
EasyMock.expect(set.wasNull()).andReturn(false);
EasyMock.replay(set);
assertEquals(1, set.getInt("col1"));
assertEquals(false, set.wasNull());
assertEquals(2, set.getInt("col2"));
assertEquals(false, set.wasNull());
And this:
ResultSet set = EasyMock.createNiceMock(ResultSet.class);
EasyMock.expect(set.getInt("col1")).andReturn(1);
EasyMock.expect(set.getInt("col2")).andReturn(2);
EasyMock.expect(set.wasNull()).andReturn(false).times(2);
EasyMock.replay(set);
assertEquals(1, set.getInt("col1"));
assertEquals(false, set.wasNull());
assertEquals(2, set.getInt("col2"));
assertEquals(false, set.wasNull());
?
Note: both sets of code compile and run successfully as jUnit tests. Also, note that the use of a “nice” mock is on purpose here.
To answer the question in your title – there’s no difference. Calling
x.expect(y).times(3)is exactly the same as calling(Note that as pointed out by Andy Thomas-Cramer, your specific examples aren’t entirely equivalent because the order of calls differ.)
This might just seem like a convenience issue. However there’s a distinct difference beyond this: in that the
times()case you can pass in the expected number of calls as a variable. Consequently you can make this configurable by some external file, or even simply by a public constant int which you also use to fire off the test harness. It’s a lot more flexible than having to explicitly compile the correct number of calls toexpect()(and update your code if you now need to test with five workers instead of three).