Мне нужна помощь в создании макетов двух объектов одновременно. Если я установил возвращаемое значение первого фиктивного объекта 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. Пожалуйста, не стесняйтесь предлагать мне что-нибудь из этих библиотек.

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

0
D V Santhosh Kiran 24 Сен 2018 в 03:04

2 ответа

Лучший ответ

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

Изменение линии

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

0
D V Santhosh Kiran 24 Сен 2018 в 02:25

Мок должен быть передан методу 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
Henri 25 Сен 2018 в 03:16