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

Метод EasyMock void

Я пытаюсь использовать EasyMock для издевательства над каким-то интерфейсом базы данных, поэтому я могу проверить бизнес-логику с помощью метода упаковки. Я обожаю методы, которые возвращаются с помощью следующего в моей настройке моего теста.

DBMapper dbmapper = EasyMock.createMock(DBMapper.class);
userService.setDBMapper(dbmapper);        

то в рамках моего фактического теста я запускаю

EasyMock.expect(dbmapper.getUser(userId1)).andReturn(mockUser1);
EasyMock.replay(dbmapper);
userService.getUser(userId1);

Затем эта услуга подключается к dbmapper и возвращает объект (преобразователь вводится с использованием методов setter)

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

userService.addUser(newUser1);

Этот метод вызывает метод void.

dbmapper.createUser(newUser);

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

EasyMock.expectLastCall();
EasyMock.replay(dbMapper);
userService.addUser(newUser1);

поскольку некоторые другие сообщения/вопросы и т.д., кажется, предлагают мне получить IlligalStateException: no last call on a mock available

Может ли кто-нибудь указать мне в правильном направлении, пожалуйста?

Большое спасибо заранее

4b9b3361

Ответ 1

Вы близко.

Вам просто нужно вызвать метод на ваш макет перед вызовом expectLastCall()

Итак, вы ожидали бы выглядеть так:

userService.addUser(newUser1);
EasyMock.expectLastCall();
EasyMock.replay(dbMapper);
userService.addUser(newUser1);

Это работает, потому что макет объекта находится в режиме записи перед вызовом replay(), поэтому любые вызовы на него будут выполнять поведение по умолчанию (возвращать null/ничего не делать) и будут иметь право на повторное воспроизведение, если метод replay() называется.

Что мне нравится делать, чтобы убедиться, что очевидно, что вызов метода для ожидания состоит в том, чтобы поставить небольшой комментарий перед ним следующим образом:

/* expect */ userService.addUser(newUser1);
EasyMock.expectLastCall();
EasyMock.replay(dbMapper);
userService.addUser(newUser1);

Ответ 2

Эта проблема не возникает, если вы используете "хороший" API:

DBMapper dbmapper = EasyMock.createNiceMock(DBMapper.class);

Есть два вида макетов - строгий и приятный. Строгий макет вызывает ошибку утверждения в случае вызова неожиданного метода. Хороший макет позволяет неожиданным вызовам метода на макет.

Для получения дополнительной информации см. официальный документ - http://easymock.org/user-guide.html#mocking-strict