java - 测试休眠方法时,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
解决方案
这里
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();
(注意前面的右括号.
)
推荐阅读
- c++ - 如何解决linux中GLFW应用静态编译的问题?
- r - 在 R 中创建小标题
- oracle - 可编辑的 oracle 顶点表
- python - 有没有办法用 python 函数评论图像
- postgresql - docker中的Postrgresql curl访问
- python - 在 Python 中实现请求 api 的重试功能,无需任何库
- javascript - 如何在自定义元素中添加按钮单击事件
- ruby-on-rails - 使用 Rails API / Rspec / Postgresql 问题的 postgres 问题
- apache-kafka - 尝试调用不存在的方法:ContainerProperties.setAckOnError()
- java - 下载 gradle 插件时在 gradle build 中替换 jcenter