2014-01-30 3 views
3

Я хотел бы проверить этот метод DAOMockito тест DAO с издевался объектов

//in GrabDao.java 
public WrapperProject getChildren(Integer entityId, String entityType){ 

    EntityDao entityDao = new EntityDao(); 
    UserDao userDao = new UserDao(); 

    EntityBase entity = entityDao.getEntityById(entityId, entityType); 
    Date dateProjet = userDao.getOrganismeFromSession().getExercice().getDateProjet(); 

    return new Wrapper(dateProjet, entity); 
} 

Это то, что я пытался до сих пор

//in GrabDaoTest.java 
    Integer paramEntityId = 1; 
    String paramEntityType = "type"; 

    EntityBase entityBase = Mockito.mock(EntityBase.class); 

    EntityDao entityDao = Mockito.mock(EntityDao.class); 
    when(entityDao.getEntityById(paramEntityId, paramEntityType)).thenReturn(entityBase); 

    UserDao userDao = Mockito.mock(UserDao.class); 
    Organisme organisme = Mockito.mock(Organisme.class); 
    Exercice excercice = Mockito.mock(Exercice.class); 

    when(userDao.getOrganismeFromSession()).thenReturn(organisme); 
    when(organisme.getExercice()).thenReturn(excercice); 
    when(userDao.getOrganismeFromSession().getExercice().getDateProjet()).thenReturn(new GregorianCalendar(2000, 01, 01).getTime()); 

Теперь я хотел бы, чтобы проверить, что GetChildren с поддельными параметрами paramEntityId и paramEntityType будет правильно возвращать WrapperProject 1 и 01/01/2000 с использованием издевавшихся методов, но я не могу понял, как запустить метод чтения говоря ей, чтобы использовать Передразнивало DAO

ответ

4

Ваш код не испытывают дружелюбный, особенно это две линии очень плохо для тестирования:

EntityDao entityDao = new EntityDao(); 
UserDao userDao = new UserDao(); 

Этот код следует перенести из этого метода на заводскую или инъецировать с помощью утилизатора, например Spring (Dependency Injection).

Только Mockito не может протестировать такой код. Ваш метод должен делать только одну вещь, создавая Daos - это другая работа.

я рекомендую вам два фильма из GoogleTechTalks:

+0

Спасибо, вы правы, я буду смотреть на них и полностью опубликовать мой последний рабочий ответ здесь – Max

+2

я соглашайтесь с MariuszS здесь. В [моей статье о Mockito wiki] (http://code.google.com/p/mockito/wiki/MockingObjectCreation) я упоминаю несколько способов использования Mockito для проверки кода, который создает новые объекты. Быстро посмотрите и посмотрите, может ли любой из них быть полезен здесь. –

+0

Не было бы правильнее сказать, что Mockito просто не поддерживает насмешку над «новыми» объектами? Потому что, если бы это было возможно (что вполне возможно), метод getChildren был бы легко проверен как есть. И DI не способ заменить использование 'new'; это способ «отделить конфигурацию от использования», что, похоже, не здесь. –

Смежные вопросы