gpt4 book ai didi

java - Mockito 在测试 hibernate 方法时总是返回 NULL

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:05:15 27 4
gpt4 key购买 nike

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

这是我的 hibernate 方法

@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

最佳答案

这里

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();

(注意 . 前的右括号)

关于java - Mockito 在测试 hibernate 方法时总是返回 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58297091/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com