Я использую серию Strict Mocks, сгенерированных с помощью EasyMock 3.2, для тестирования метода, который сам вызывает рекурсию. Установив ожидания моих макетов, я могу управлять этим методом, чтобы он только один раз вызывал себя, а затем выходил. Тем не менее, я вижу очень странное поведение от 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 в рекурсивных функциях?
это предположение, но попробуйте изменить 'Replay (srcCollection, брокер),' 'на повторе (srcCollection);' – Jason
Было бы полезно посмотреть ваш метод 'getURI'. Кроме того, убедитесь, что вам не нужно издеваться над другими методами в классе NativeBroker. –
@Jason Если я не перепрограммирую «брокер», то мои ожидания для 'getCollection' и' getSubject' на частичном макете сбой. – adamretter