Взгляните на метод, который вы высмеиваете
Mockito.when(session.createQuery(ArgumentMatchers.anyString())).thenReturn(query);
и метод, который вы вызываете:
Query<StudentDetail> query = session.createQuery(hql, StudentDetail.class);
они имеют разную точность (количество аргументов). Вы имитируете метод с одним аргументом и вызываете с двумя. Если вы не знаете, что должно вернуться, верните null
.
Редактировать:
@Mock
List<StudentDetail> list;
//....
Mockito.when(query.getResultList()).thenReturn(list);
Как вы инициализируете и заполняете список? Кстати, лучшая (на мой взгляд) версия этого кода:
@Mock
SessionFactory sessionFactory;
@Mock
Query query;
@Mock
Session session;
@InjectMocks
private StudentDAO studentDAO ;
// Test get method
@Test
public void getListStudentTest() {
StudentDetail sd1 = new StudentDetail(1, "A", "X");
List<StudentDetail> list = new ArrayList<>();
list.add(sd1);
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));
}
Теперь мы высмеиваем внешние ресурсы / ресурсы фреймворка (SessionFactory
, Session
, Query
) и вручную управляем нашими данными.