테스트 케이스에 걸려있어 오류가 발생하여 "실제로이 모의 객체와의 상호 작용이 없었습니다."라는 질문을 받고 싶습니다.Mockito 테스트 실패 : 실제로이 모의 객체와의 상호 작용이 없습니다.
나는 CRUD 작업을 수행하는 Dao 구현 클래스를 만들었습니다.
public class EmployeeDaoImpl implements EmployeeDao {
@Override
public void saveEmployee(EmployeeDetails employee) {
Session session = HibernateUtil.getSessionFactory().openSession();
Transaction transaction = session.beginTransaction();
session.save(employee);
transaction.commit();
session.close();
}
}
위의 클래스에서 나는 Mockito를 사용하여 테스트를 구축하고 있습니다. 그래서 위의 saveEmployee 메소드 Session에 TRANSaction을 Mock 객체로 만들었습니다. 이제는 세션, 및 트랜잭션을 확인해야합니다.
그래서 내가 쓴 아래의 Mockito 코드 : 내가 코드를 디버깅하고 코드가 모든 내 IDE에서 브레이크 포인트에 통과
/** * */
package sandeep.test;
import static org.junit.Assert.*;
import javax.transaction.HeuristicMixedException;
import javax.transaction.HeuristicRollbackException;
import javax.transaction.RollbackException;
import javax.transaction.SystemException;
import javax.transaction.Transaction;
import junit.framework.Assert;
import org.hibernate.Session;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.runners.MockitoJUnitRunner;
import sandeep.DAO.EmployeeDao;
import sandeep.DAOImpl.EmployeeDaoImpl;
import sandeep.DAOImpl.HibernateUtil;
import sandeep.pojo.EmployeeDetails;
import static org.mockito.Mockito.*;
/**
* @author sandeep
*
*/
@RunWith(MockitoJUnitRunner.class)
public class EmployeeDaoImplTest {
@Mock
EmployeeDetails edt;
@Mock
Session session ;
@Mock
Transaction transaction;
@InjectMocks
EmployeeDaoImpl edi = new EmployeeDaoImpl();
@Before
public void setUp() throws Exception {
//eimpl = new EmployeeDaoImpl();
//emp= mock(EmployeeDao.class);
}
@After
public void tearDown() throws Exception {
}
@Test
public void testSaveEmployee(){
edi.saveEmployee(getEmployeeDetails());
// But here i am getting the error as zero interactions
verify(session, times(1)).save(EmployeeDetails.class);
}
public EmployeeDetails getEmployeeDetails(){
edt = new EmployeeDetails();
edt.setEname("sandeep");
edt.setId(2);
edt.setEnumber("hoi");
return edt;
}
}
이 값을 3 번 실행하면 데이터베이스에 추가되지만 상호 작용이 없으므로 테스트 케이스가 실패합니다.
나를 설명 해주셔서 감사합니다.하지만이 작업을 수행하려고하는 트랜잭션을 추가해야합니다. 한가지 더 있습니다 HibernateUtil.getSessionFactory(). openSession(); 정적이고 나는 우리가 사용할 수있는 어떤 방법이라도 사용할 수있는 Mockito를 사용하지 않을 것 같아 @ luc14n0 –
@SandeepV PowerMockito 라이브러리를 탐색하여 정적 메소드를 모방 할 수있다. –