Тест DAO с мокито

Я хотел бы проверить этот метод 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 с поддельными params paramEntityId и paramEntityType правильно вернут WrapperProject 1 и 01.01.2000, используя mocked- методы, но я не могу понять, как запустить метод read, говорящий ей использовать mocked дао

1 ответ

Решение

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

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

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

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

Я буду рекомендовать вам два фильма из GoogleTechTalks:

Другие вопросы по тегам