Разница между EasyMock.expect (...). Times (...) и EasyMock.expect (...) несколько раз? - PullRequest
7 голосов
/ 20 сентября 2011

Какая разница между:

ResultSet set = EasyMock.createNiceMock(ResultSet.class);
EasyMock.expect(set.getInt("col1")).andReturn(1);
EasyMock.expect(set.wasNull()).andReturn(false);
EasyMock.expect(set.getInt("col2")).andReturn(2);
EasyMock.expect(set.wasNull()).andReturn(false);
EasyMock.replay(set);

assertEquals(1, set.getInt("col1"));
assertEquals(false, set.wasNull());
assertEquals(2, set.getInt("col2"));
assertEquals(false, set.wasNull());

А это:

ResultSet set = EasyMock.createNiceMock(ResultSet.class);
EasyMock.expect(set.getInt("col1")).andReturn(1);
EasyMock.expect(set.getInt("col2")).andReturn(2);
EasyMock.expect(set.wasNull()).andReturn(false).times(2);
EasyMock.replay(set);

assertEquals(1, set.getInt("col1"));
assertEquals(false, set.wasNull());
assertEquals(2, set.getInt("col2"));
assertEquals(false, set.wasNull());

Примечание: оба набора кода компилируются и успешно выполняются как тесты jUnit. Кроме того, обратите внимание, что использование «хорошего» макета здесь специально.

Ответы [ 2 ]

9 голосов
/ 20 сентября 2011

Чтобы ответить на вопрос в вашем названии - нет никакой разницы. Звонить x.expect(y).times(3) точно так же, как звонить

x.expect(y);
x.expect(y);
x.expect(y);

(Обратите внимание, что, как указал Энди Томас-Крамер, ваши конкретные примеры не совсем эквивалентны, поскольку порядок вызовов различается.)

Это может показаться вопросом удобства. Однако за этим есть явное отличие: в этом случае times() вы можете передать ожидаемое количество вызовов в качестве переменной. Следовательно, вы можете сделать это конфигурируемым с помощью некоторого внешнего файла или даже просто с помощью публичной константы int, которую вы также используете для запуска тестового жгута. Это гораздо более гибко, чем необходимость явно скомпилировать правильное количество вызовов в expect() (и обновить код, если теперь вам нужно тестировать с пятью рабочими вместо трех).

3 голосов
/ 20 сентября 2011

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

...