用模拟对象测试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());

现在,我想测试带有假params ParamentityId ParamentityType getChildren >2000 使用模拟方法,但我无法弄清楚如何启动读取方法告诉她使用模拟的dao

您的代码不友好,尤其是这两行对于测试非常不好:

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

该代码应从此方法移动到工厂或注入诸如Spring(依赖项注入)之类的容器。

单独的offito不能像这样测试代码。您的方法应该只做一件事,创建Daos是另一个工作。

我会向您推荐两部来自Googletechtalks的电影:

  • 如何编写清洁,可测试的代码
  • 干净的代码谈话 - 不要寻找东西!

相关内容

  • 没有找到相关文章