title: Mockito Replace Method
body: <p>I have a Class:</p>
  
  <pre><code>    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 ==");
          }
  
      }
  }
  </code></pre>
  
  <p>And I need to mock the method: </p>
  
  <pre><code>public Session getSession() throws DAOServiceException{
      return super.getSession();
  }
  </code></pre>
  
  <p>for replace the Hibernate datasource in the jUnit test phase.</p>
  
  <p>I have this code with Mockito:</p>
  
  <pre><code>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);        
      }
  
  
  }
  </code></pre>
  
  <p>But when I call :</p>
  
  <pre><code>prodcomDao.createProductComercialOrder(prodCom);
  </code></pre>
  
  <p>The original <code>ProductComercialOrderDAO.getSession()</code> is called, instead of my mock.</p>
  
  <p>How I can Mock the method for replace the hibernate session?</p>