2013-07-19 4 views
0

У меня есть интерфейс ShoppingListDAO, как показано ниже.Стыковка объектов db с помощью PowerMock-easymock

public interface ShoppingListDAO extends GenericDAO<Object, String> {  
    public List<ShoppingList> getShoppingList(Department department) throws ShoppingListDAOException; 
} 

И его реализация Класс DAO - это что-то вроде ниже.

public class ShoppingListDAOImpl extends GenericCustomDAO<Object, String> implements ShoppingListDAO { 
    //....... 
    public List<ShoppingList> getShoppingList(Department department) throws ShoppingListDAOException { 

    try {    
     ds = getDataSource(); 
     connection = ds.getConnection(); 

     callableStatment = connection.prepareCall(SHOPPING_LIST_QRY1); 
     callableStatment.setString(1, department.getDistributorNumber()); 
     //......  
     callableStatment.registerOutParameter(4, OracleTypes.CURSOR); 

     callableStatment.execute(); 
     resultSet= (ResultSet) callableStatment.getObject(4); 

     while(resultSet.next()) { 
      //....... 
     }   
    } catch (SQLException e) {   
     e.printStackTrace(); 
     throw new ShoppingListDAOException(e); 
    } catch (Exception e) {   
     e.printStackTrace(); 
     throw new ShoppingListDAOException(e); 
    }finally{ 
     //......     
    } 
} 

    return shoppingList; 
} 

Теперь у меня есть требование, чтобы проверить мой реализованный класс DAO, используя Mock дб Objects.I просмотрел POWERMOCK документации/EasyMock, но я предполагаю, что большинство из API методов дает мне объекты, которые предоставляют мне фиктивный класс реализации интерфейса DAO ,

  1. является Там каким-то образом я могу создать фиктивный объект подключения (при условии, что я не имею физический доступ к базе данных) и могу работать последующий код, предоставленный в моем ShoppingListDAOImpl классе , как я должен использовать это насмешливый для покрытия коды цель?

  2. если есть способ я могу сделать callableStatement.execute() возвращать данные пустышки или Exception (Withour физического доступа к базе данных), так что я могу проверить его в моих тестов JUnit?

Я совершенно новый для насмешливого фреймворка. Возможно, мои требования нереалистичны. Любая информация будет полезна.

ответ

0

С макетами, такими как EasyMock, Powermock или Mockito, вы можете издеваться над всем. Но я бы не рекомендовал издеваться над Connection.

В вашем случае я бы использовал базу данных в памяти, такую ​​как HSQLDB, чтобы протестировать ваш DAO с реальной БД, но DB, которая работает в памяти. Таким образом, ваш тест не зависит от каких-либо внешних ресурсов и может легко работать в любой среде.

Проверяя свой код на базе базы данных, вы строго не тестируете его. Хотя я думаю, что это приемлемый компромисс.

+0

Thx за предложение, я постараюсь узнать и использовать базу данных в памяти. – Rahul

+1

Но могу ли я использовать насмешку ... Я имею в виду, если я буду moke Connection, то CallableStatement, а затем resultet, возможно ли это? Этот способ я могу получить любой вывод, который я хочу из метода «выполнить» ??????? – Rahul

Смежные вопросы