我正在使用EasyMock 3.2生成的一系列Strict Mocks來遞歸調用自身的方法。通過設置我的嘲笑的期望,我可以控制該方法,使其只調用一次,然後退出。但是,我看到EasyMock中的一些非常奇怪的行爲,看起來像一個錯誤,它讓人對預計方法的次數感到困惑。以遞歸方法使用EasyMock
例如:
final Collection srcCollection = EasyMock.createStrictMock(Collection.class);
final NativeBroker broker = EasyMock.createMockBuilder(NativeBroker.class)
.addMockedMethod("getCollection")
.addMockedMethod("getSubject")
.createStrictMock();
expect(srcCollection.getURI()).andReturn(src);
replay(srcCollection, broker);
//run the test
broker.checkPermissionsForCopy(srcCollection, dest, newName);
verify(srcCollection, broker);
信息從EasyMock的錯誤:
java.lang.AssertionError:
Expectation failure on verify:
Collection.getURI(): expected: 2, actual: 1
at org.easymock.internal.MocksControl.verify(MocksControl.java:226)
at org.easymock.EasyMock.verify(EasyMock.java:2080)
我只指示EasyMock的期望一個結果,爲何還以爲我想要兩個?我也得到了同樣的錯誤,如果我改變我的期望,這樣的:
expect(srcCollection.getURI()).andReturn(src).once();
...它得到的陌生人......
如果我改變我的期望,這樣的:
expect(srcCollection.getURI()).andReturn(src).times(2);
我得到的錯誤:
java.lang.AssertionError:
Expectation failure on verify:
Collection.getURI(): expected: 3, actual: 1
at org.easymock.internal.MocksControl.verify(MocksControl.java:226)
at org.easymock.EasyMock.verify(EasyMock.java:2080)
而且,如果進一步更改我的期望,這樣的:
expect(srcCollection.getURI()).andReturn(src).anyTimes();
我得到一個更奇怪的錯誤:
java.lang.IllegalStateException: last method called on mock already has a non-fixed count set.
at org.easymock.internal.MocksControl.replay(MocksControl.java:216)
at org.easymock.EasyMock.replay(EasyMock.java:2012)
沒有人有任何建議或知道的遞歸函數與EasyMock的任何限制?
這是一個猜測,但嘗試改變'重播(srcCollection,經紀人);''來重播(srcCollection);' – Jason
這將會是有助於查看您的getURI方法。 此外,請確保您不需要在NativeBroker類中模擬任何其他方法。 –
@Jason如果我不重播'broker',那麼我對部分模擬中'getCollection'和'getSubject'的期望就會失敗。 – adamretter