首页 > 解决方案 > 测试休眠方法时,Mockito 总是返回 NULL

问题描述

我有一些休眠方法,当我测试它们时,mockito 总是返回 null 而不是期望值

这是我的休眠方法

@Autowired
private SessionFactory sessionFactory;

public StudentDAO() {

}
public List<StudentDetail> listStudentDetail() {
    String hql = "Select new " + StudentDetail.class.getName() //
            + "(s.studentid,s.name,s.address) " //
            + " from " + Student.class.getName() + " s ";
    Session session = this.sessionFactory.getCurrentSession();
    Query<StudentDetail> query = session.createQuery(hql, StudentDetail.class);
    List<StudentDetail> list =null;
    list = query.getResultList();
    return list;
}

这是我的测试方法

@Mock
SessionFactory sessionFactory;
@Mock
Query query;
@Mock
Session session;
@Mock
List<StudentDetail> list;
@InjectMocks
private StudentDAO studentDAO ;

// Test get method

@Test
public void getListStudentTest() {
    StudentDetail sd1 = new StudentDetail(1, "A", "X");
    Mockito.when(query.getResultList()).thenReturn(list);
    Mockito.when(sessionFactory.getCurrentSession()).thenReturn(session);
    Mockito.when(session.createQuery(ArgumentMatchers.anyString())).thenReturn(query);
    Mockito.verify(sessionFactory.getCurrentSession());
    Mockito.verify(session.createQuery(ArgumentMatchers.anyString(),ArgumentMatchers.anyObject() ));
    Mockito.verify(query.getResultList());

    Assert.assertEquals(sd1, studentDAO.listStudentDetail().get(0));
}

当我运行我的网络应用程序时,studentDAO.listStudentDetail()通常返回真值,但在测试方法中它总是返回 null

标签: javahibernatetestingjunitmockito

解决方案


这里

Assert.assertEquals(sd1, studentDAO.listStudentDetail().get(0));

返回一个studentDAO.listStudentDetail()模拟列表。你没有嘲笑它的.get方法。因此它null默认返回。您应该修改您的assertEquals支票:

Assert.assertEquals(list, studentDAO.listStudentDetail());

(你根本不需要这个sd1对象)


你也没有verify正确使用。你应该这样做:

Mockito.verify(sessionFactory).getCurrentSession();
Mockito.verify(session).createQuery(ArgumentMatchers.anyString());
Mockito.verify(query).getResultList();

(注意前面的右括号.


推荐阅读