Создание фиктивного объекта внутри метода - PullRequest
4 голосов
/ 22 сентября 2010

Если у меня есть следующий метод:

public void handleUser(String user) {

    User user = new User("Bob");
    Phone phone = userDao.getPhone(user);
    //something else
}

Когда я тестирую это с макетами с помощью EasyMock, могу ли я в любом случае протестировать параметр User, который я передал в мой макет UserDao, следующим образом:

User user = new User("Bob");
EasyMock.expect(userDaoMock.getPhone(user)).andReturn(new Phone());

Когда я пытался запустить вышеуказанный тест, он жалуется на неожиданный вызов метода, который я предполагаю, потому что фактически созданный в методе пользователь не совпадает с тем, который я передаю ... я прав в этом?

Или это самый строгий способ проверить параметр, который я передаю в UserDao, просто:

EasyMock.expect(userDaoMock.getPhone(EasyMock.isA(User.class))).andReturn(new Phone());

Ответы [ 3 ]

3 голосов
/ 22 сентября 2010

Вы правы, что генерируется неожиданный вызов метода, потому что объект User отличается от ожидаемого и фактического вызовов на getPhone.

Как @ laurence-gonsalves упоминает в комментарии, если User имеет полезный метод equals, вы можете использовать EasyMock.eq(mockUser) внутри ожидаемого вызова getPhone, который должен проверить, что это два User объекта равны.

Ознакомьтесь с документацией EasyMock , в частности, в разделе «Гибкие ожидания при сопоставлениях аргументов».

1 голос
/ 16 апреля 2013

Вы можете использовать

EasyMock.expect(userDaoMock.getPhone(EasyMock.anyObject())).andReturn(new Phone());

Я думаю, что это должно решить вашу проблему.

0 голосов
/ 09 декабря 2014

Небольшое изменение в ответе Yeswanth Devisetty

EasyMock.expect(userDaoMock.getPhone(EasyMock.anyObject(User.class))).andReturn(new Phone());

Это решит проблему.

...