Ожидания EasyMock с использованием недействительных методов
Я использую EasyMock для выполнения некоторых модульных тестов, и я не понимаю использования EasyMock.expectLastCall()
. Как вы можете видеть в моем коде ниже, у меня есть объект с методом, который возвращает void, вызываемый в другом методе объекта. Я бы подумал, что мне нужно заставить EasyMock ожидать, что вызов метода, но я попытался прокомментировать вызов expectLastCall()
, и он все еще работает. Это потому, что я передал EasyMock.anyObject())
, что он зарегистрировал его как ожидаемый звонок или что-то еще происходит?
MyObject obj = EasyMock.createMock(MyObject.class);
MySomething something = EasyMock.createMock(MySomething.class);
EasyMock.expect(obj.methodThatReturnsSomething()).andReturn(something);
obj.methodThatReturnsVoid(EasyMock.<String>anyObject());
// whether I comment this out or not, it works
EasyMock.expectLastCall();
EasyMock.replay(obj);
// This method calls the obj.methodThatReturnsVoid()
someOtherObject.method(obj);
API doc для EasyMock говорит об этом expectLastCall()
:
Returns the expectation setter for the last expected invocation in the current thread. This method is used for expected invocations on void methods.
Ответы
Ответ 1
Этот метод возвращает вам дескриптор ожидания через IExpectationSetters
; который дает вам возможность проверить (утверждать), что ваш метод void был вызван или нет, и связанные с ним поведения, например.
EasyMock.expectLastCall().once();
EasyMock.expectLastCall().atLeastOnce();
EasyMock.expectLastCall().anyTimes();
Подробный API IExpectationSetters здесь.
В вашем примере вы просто получаете дескриптор и ничего не делаете с ним , следовательно, вы не видите никакого влияния на удаление или удаление оператора. Это очень похоже на вызов метода getter или объявить некоторую переменную и не использовать ее.
Ответ 2
Вам нужно только EasyMock.expectLastCall();
, если вам нужно дополнительно проверить что-либо другое, кроме "То, что метод был вызван (так же, как и для ожидания установки)"
Скажите, что вы хотите проверить, сколько раз был вызван метод, поэтому вы добавите любой из:
EasyMock.expectLastCall().once();
EasyMock.expectLastCall().atLeastOnce();
EasyMock.expectLastCall().anyTimes();
Или скажите, что вы хотите выбросить исключение
EasyMock.expectLastCall().andThrow()
Если вам все равно, то EasyMock.expectLastCall();
не требуется и не имеет никакого значения, ваше утверждение "obj.methodThatReturnsVoid(EasyMock.<String>anyObject());"
достаточно для установки ожидания.
Ответ 3
Вам не хватает EasyMock.verify(..)
MyObject obj = EasyMock.createMock(MyObject.class);
MySomething something = EasyMock.createMock(MySomething.class);
EasyMock.expect(obj.methodThatReturnsSomething()).andReturn(something);
obj.methodThatReturnsVoid(EasyMock.<String>anyObject());
// whether I comment this out or not, it works
EasyMock.expectLastCall();
EasyMock.replay(obj);
// This method calls the obj.methodThatReturnsVoid()
someOtherObject.method(obj);
// verify that your method was called
EasyMock.verify(obj);