Как смоделировать несколько объектов, которые будут возвращать ненулевые значения - PullRequest
0 голосов
/ 24 сентября 2018

Мне нужна помощь в создании насмешливых двух объектов одновременно.Если я устанавливаю возвращаемое значение первого mock obj, т.е. mockClassA, равным null, оно работает нормально.Я использую аннотации @Mock, @TestSubject EasyMock.И если я не устанавливаю возвращение первого ложного ожидания как null, я вижу следующую ошибку:

java.lang.IllegalStateException: last method called on mock is not a void method

Вот код, который я пытаюсь:

    EasyMock.expect(mockClassA.getValfromDB()).andReturn(ValA);
    EasyMock.replay();
EasyMock.expect(mockoClassB.makeRestCall(EasyMock.anyString())).times(2).andReturn(httpResponse);
    EasyMock.replay();

Если EasyMock не поддерживает манипулирование несколькими объектами в одном методе, я могу использовать Mockito, PowerMockito, EasyMockSupport.Пожалуйста, не стесняйтесь предложить мне что-нибудь из этих библиотек.

PS: я уже пробовал использовать replayall() от EasyMockSupport.Но это не имело никакого значения.

Ответы [ 2 ]

0 голосов
/ 25 сентября 2018

Макет должен быть передан методу replay().Итак, ваш оригинальный код или ответ не работают.Тем не менее, это правда, что times() должен быть после andReturn().

Так что правильный код будет

expect(mockClassA.getValfromDB()).andReturn(ValA);
expect(mockClassB.makeRestCall(anyString())).andReturn(httpResponse).times(2);
replay(mockClassA, mockClassB);

или это с EasyMockSupport:

expect(mockClassA.getValfromDB()).andReturn(ValA);
expect(mockClassB.makeRestCall(anyString())).andReturn(httpResponse).times(2);
replayAll();

Обратите внимание, что я использую статический импорт.Это делает код намного более приятным для глаз.

0 голосов
/ 24 сентября 2018

Я смог отладить свой код и обнаружил, что неправильно даю число раз.

Изменение строки

EasyMock.expect(mockClassB.makeRestCall(EasyMock.anyString())).times(2).andReturn(httpResponse);
EasyMock.replay();

на

EasyMock.expect(mockClassB.makeRestCall(EasyMock.anyString())).andReturn(httpResponse);
EasyMock.expectLastCall().times(2);
EasyMock.replay();

решил мою проблему (Наблюдение expectLastCall.times(2)).

Ссылка: TutorialsPoint.com

...