У меня есть метод в studentResultHibernateDao
@Override
public Map<String, Object> getStudentResultByNameAndId(String name ,String id, Number batchId) {
final String queryString = " select id , tracking_type_id , date_created from STUDENT_RESULT_INFO "+
" where name = '" + name + "' and batch_id = "+batchId + " and tracking_type_id in (1,2) " ;
SQLQuery sq = sessionFactory.getCurrentSession().createSQLQuery(queryString);
sq.addScalar("id", StringType.INSTANCE);
sq.addScalar("tracking_type_id",StringType.INSTANCE);
sq.addScalar("date_created", TimestampType.INSTANCE);
sq.setResultTransformer(AliasToEntityMapResultTransformer.INSTANCE);
List<Map<String, Object>> resultSet = sq.list();
Map<String, Object> trackingInfo = new HashMap<String, Object>();
for (Map<String, Object> resultMap : resultSet) {
trackingInfo.put((String) resultMap.get("id") + "-" + (String) resultMap.get("tracking_type_id"),(Timestamp) resultMap.get("date_created"));
}
return trackingInfo;
}
Для метода getStudentResultByNameAndId я пытаюсь написать тест jUnit: Ниже приведен код, который я пробовал до сих пор.
В StudentResultHibernateDaoTest.java
@RunWith(MockitoJUnitRunner.class)
public class StudentResultHibernateDaoTest {
@Mock
private Log log;
@Mock
private SessionFactory sessionFactory;
@Mock
private Session session;
@Rule
public MockitoRule mockitoRule = MockitoJUnit.rule();
@InjectMocks
private StudentResultHibernateDao studentResultHibernateDao;
@Before
public void beforeTest(){
MockitoAnnotations.initMocks(this);
}
@Test
public void testGetStudentResultByNameAndId() {
String name = "fgafsg@gmail.com";
Number batchId = 23;
List<StudentInfoTest> studentInfoList = new ArrayList<>(1);
Session session = Mockito.mock(Session.class);
Query query = Mockito.mock(Query.class);
Mockito.when(sessionFactory.getCurrentSession()).thenReturn(session);
Mockito.when(session.createQuery(" select id , tracking_type_id , date_created from STUDENT_RESULT_INFO "+
" where name = '" + name + "' and batch_id = "+batchId + " and tracking_type_id in (1,2) ")).thenReturn(query);
//how to add "sq.addScalar" in mockito as in above code.
Mockito.when(query.list()).thenReturn(studentInfoList);
}
В StudentInfoTest.java
public class StudentInfoTest{
// should i create a model class as normally? what should i do here
}
Является ли приведенная выше реализация верной для тестирования junit для sqlQueries?Как добавить скалярные свойства к SQL-запросам в mockito?