EasyMock ожидает, что метод возвращает несколько разных объектов в одном тесте - PullRequest
10 голосов
/ 03 августа 2011

Я использую EasyMock для модульного тестирования моего Java-кода.Класс, который я пытаюсь протестировать - это уровень API RESTful веб-сервиса.API имеет базовый уровень сервиса, который проверяется в тесте API.Моя проблема состоит в том, чтобы выяснить, как правильно выполнить модульное тестирование моего editObject(ID, params...) API-метода, поскольку он дважды вызывает service.getById() и ожидает, что при каждом вызове будет возвращаться другой объект.

editObject(ID, params...) сначала пытается получить объект из сервисного уровня, чтобы убедиться, что идентификатор действителен (первый ожидаемый вызов service.getById(ID) возвращает исходный неизмененный объект).Затем он изменяет параметры, указанные в вызове API, сохраняет его в службе и вызывает get снова, чтобы передать вызывающему объекту измененный объект, управляемый службой (второй вызов service.getbyId(ID), ожидающий, возвращает измененный объект).

Есть ли способ представить это с EasyMock ?.

Ответы [ 3 ]

26 голосов
/ 03 августа 2011

Конечно, вы можете сделать две разные вещи для двух вызовов метода с одним и тем же методом и параметрами.Просто заявите о своих ожиданиях в том порядке, в котором вы ожидаете их, и настройте соответствующие ответы.

expect(mockService.getById(7)).andReturn(originalObject).once();
expect(mockService.getById(7)).andReturn(modifiedObject).once();
replay(mockService);

.once() не является обязательным, но в этом случае я считаю, что он больше самодокументируется.

6 голосов
/ 16 апреля 2015

Вы можете объединить несколько andReturn вызовов методов:

EasyMock.expect(service.getById(1))
    .andReturn(firstObject)
    .andReturn(secondObject);

В первый раз service.getById вызывается с 1 в качестве аргумента, макет вернет firstObject, а во второй раз secondObject. Вы можете связать столько строк, сколько захотите, и даже выдать исключение через andThrow для конкретного вызова.

0 голосов
/ 10 февраля 2015

Этот метод также полезен в условных выражениях, в которых вы можете аннулировать первое условие, но пропустите второе или наоборот.

...