2015-07-03 1 views
0

Я пытался найти решение, но еще не нашел. Я попытался проверить публичный метод, который вызывает вызовы пары частных внутри. Одна из проблем заключается в том, что частный метод извлекает критерии Hibernate по универсальному методу, который, в свою очередь, извлекает его через цепочку других общих методов. Пожалуйста, ознакомьтесь с приведенным ниже кодом. Откровенно говоря, я не уверен, что это можно проверить, что случай, но если у кого есть идеи, пожалуйста, предложите им:Mockito - Метод тестирования, который вызывает частные методы

ConcreteDao

public class ConcreteDao extends EntityDao<ConcreteEntity> { 

    public Class<ConcreteEntity> getClassType() { 
     return ConcreteEntity.class; 
    } 

} 

EntityDao

public abstract class EntityDao<T> extends AbstractDao<T>{ 

    public List<T> getEntityByFilter(EntityFilter filter) { 
     Criteria criteria = getCriteriaByFilter(filter.getFilters()); 
     criteria.setMaxResult(filter.getMaxResult()); 
     criteria.setFirstResult(filter.getFirstResult()); 
     criteria.addOrder(Order.asc(filter.getSortedField())); 
     criteria.list(); 
    } 

    private Criteria getCriteriaByFilter(List<CustFilter> filters) { 
     Criteria criteria = getCriteria(); 
     for (CustFilter filter : filters) { 
      filter.addrestrictionToCriteria(criteria, filter.getProperty(), filter.getValue()); 
     } 
     return criteria; 
    } 

} 

AbstractDao

public abstract class AbstractDao<T> { 

    private EntityManagerFactory entityManagerFactory; 

    public abstract getClassType(); 

    public Criteria getCriteria() { 
     return getSession().createCriteria(getClassType()); 
    } 

    public Session getSession() { 
     Session session = (Session) getEntityManager().getDelegate(); 
     return session; 
    } 

    public EntityManager getEntityManager() { 
     entityManagerFactory.getEntityManager(); 
    } 

} 

Тест класс

@RunWith(MockitoJUnitRunner.class) 
public class ConcreteDaoTest { 

    @Mock 
    private EntityManager entityManager; 

    @Mock 
    private Session session; 

    @Mock 
    private Criteria criteria; 

    private List<CustFilter> filters; 

    private EntityFilter entityFilter; 

    private List<ConcreteEntity> resultList; 

    @InjectMocks 
    private ConcreteDao concreteDao = new ConcreteDao; 

    public void init() { 
     filters = new ArrayLis<CustFilter>(); 
     CustFilter custFilter = new CustFilter(); 
     //fill filter; 
     filters.add(custFilter); 

     entityFilter = new EntityFilter(); 
     //fill entityFilter 
     entityFilter.setFilters(filters); 

     ConcreteEntity concreteEntity = new ConcreteEntity(); 
     resultList = new ArrayList<ConcreteEntity>(); 
     resultList.add(concreteEntity); 

    } 


    @Test 
    public void getEntityByFilterTest() { 
     when(concreteDao.getEntityManager).thenReturn(entityManager); 
     when(concreteDao.getSession()).thenReturn(session); 
     when(concretedao.getCriteria()).thenReturn(criteria); 

     when(filter.getFilters()).thenReturn(filters); 
     when(filter.getMaxResult()).thenReturn(10); 
     when(filter.getFirstResult()).thenReturn(0); 
     when(filter.getSortedField()).thenReturn("firstName"); 
     when(criteria.list()).thenReturn(resultList); 

     List<ConcreteEntity> result = concreteDao.getEntityByFilter(entityFilter); 
     Assert.assertThen(result. is(notNullValue())); 
    } 

} 
+0

Если вы пытаетесь высмеять частные методы, то способ, которым вы разработали свои классы, подлежит пересмотру. – kuhajeyan

+0

Я согласен с вами, но я должен покрыть уже существующий код. У меня нет возможности изменять модификаторы доступа к методам. – aime

ответ

1

С Mockito, вы не можете издеваться частные вызовы методов. Попробуйте PowerMockito, с помощью которого вы можете издеваться над любыми методами, такими как статические методы, частные методы, локальные методы и т. Д.

+0

Я получил это. Спасибо за совет. – aime