2016-10-24 4 views
1

Ich habe eine Klasse:Mockito Methode ersetzen

public class ProductComercialOrderDAO extends BaseDao implements ProductComercialOrderDAOLocal { 

    private final static Logger log = UtilsBusiness.getLog4J(ProductComercialOrderDAO.class); 

    public Session getSession() throws DAOServiceException{ 
     return super.getSession(); 
    } 

    @Override 
    @TransactionAttribute(TransactionAttributeType.REQUIRED) 
    public void createProductComertialOrder(ProductComertialOrder pcom) throws DAOServiceException, DAOSQLException { 

     log.debug("== Init createProductComertialOrder/ProductComercialOrderDAO =="); 
     Session session = this.getSession(); 
     try { 
      session.save(pcom); 
      this.doFlush(session); 
     } catch (Throwable ex) { 
      log.error("== Exception in ProductComertialOrder =="); 
      throw super.manageException(ex); 
     } finally { 
      log.debug("== createProductComertialOrder/ProductComercialOrderDAO End =="); 
     } 

    } 
} 

Und ich brauche die Methode zu verspotten:

public Session getSession() throws DAOServiceException{ 
    return super.getSession(); 
} 

für die Hibernate-Datenquelle in der JUnit-Testphase ersetzen.

Ich habe diesen Code mit Mockito:

package dao; 

import static org.junit.Assert.assertEquals; 
import static org.mockito.Mockito.when; 

import java.util.Date; 

import javax.ejb.EJB; 

import org.hibernate.SessionFactory; 
import org.hibernate.classic.Session; 
import org.junit.After; 
import org.junit.Before; 
import org.junit.BeforeClass; 
import org.junit.Test; 
import org.mockito.InjectMocks; 
import org.mockito.Mock; 
import org.mockito.Mockito; 

import co.com.myapp.sdii.exceptions.DAOSQLException; 
import co.com.myapp.sdii.exceptions.DAOServiceException; 
import co.com.myapp.sdii.model.pojo.ProductComercialOrder; 
import co.com.myapp.sdii.persistence.dao.core.impl.ProductComercialOrderDAO; 
import co.com.myapp.sdii.persistence.hibernate.HibernateUtil; 

public class ProductComercialOrderDAOTest { 

    public ProductComercialOrderDAO prodcomDao; 

    private ProductComercialOrder prodCom; 
    SessionFactory sessionFact = null; 
    Session session = null; 


    @Test 
    public void setUp() throws DAOServiceException, DAOSQLException{ 
     sessionFact = util.HibernateUtil.getSessionFactory(); 
     sessionFact.openSession(); 
     session = sessionFact.getCurrentSession(); 

     prodCom = new ProductComercialOrder(); 
     prodCom.setCreationDate(new Date()); 
     prodCom.setCreationUser("user1"); 
     prodCom.setId(1L); 
     prodCom.setPrdCategory("Hardware"); 
     prodCom.setPrdCategoryType("IRD"); 
     prodCom.setOrderNum(1L); 

     if(prodcomDao == null){ 
      prodcomDao = new ProductComercialOrderDAO(); 
     } 

     Mockito.spy(ProductComercialOrder.class); 
     Mockito.when(prodcomDao.getSession()).thenReturn(session); 
     prodcomDao.createProductComercialOrder(prodCom);   
    } 


} 

Aber wenn ich rufe:

prodcomDao.createProductComercialOrder(prodCom); 

Die ursprüngliche ProductComercialOrderDAO.getSession() genannt wird, statt meine Mock.

Wie kann ich die Methode zum Ersetzen der Ruhezustand-Sitzung verhöhnen?

Antwort