Подтвердить что ты не робот

Ожидания 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.
4b9b3361

Ответ 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);