2012-07-04 74 views
0

我想單元測試我創建的DatabaseService類(修改了我在線上找到的WishList應用程序) package com.test.db;我可以在包含應用程序之外使用ORMlite/SQLlite

import java.sql.SQLException; 
    import java.util.List; 
    import android.content.Context; 
    import com.test.model.WishList; 

    public class WishListService 
    { 
     private static WishListService instance; 

     public static void init(Context ctx) 
     { 
      if (null == instance) 
      { 
       instance = new WishListService(ctx); 
      } 
     } 

     static public WishListService getInstance() 
     { 
      return instance; 
     } 

     private DatabaseHelper helper; 

     private WishListService(Context ctx) 
     { 
      helper = DatabaseHelper.getInstance(ctx); 
     } 

     public List<WishList> getAllWishLists() 
     { 
      List<WishList> wishLists = null; 
      try 
      { 
       wishLists = helper.getWishListDao().queryForAll(); 
      } catch (SQLException e) 
      { 
       e.printStackTrace(); 
      } 
      return wishLists; 
     } 

     public void addWishList(WishList l) 
     { 
      try 
      { 
       helper.getWishListDao().create(l); 
      } catch (SQLException e) 
      { 
       e.printStackTrace(); 
      } 
     } 

     public WishList getWishListWithId(int wishListId) 
     { 
      WishList wishList = null; 
      try 
      { 
       wishList = helper.getWishListDao().queryForId(wishListId); 
      } catch (SQLException e) 
      { 
       e.printStackTrace(); 
      } 
      return wishList; 
     } 

     public void deleteWishList(WishList wishList) 
     { 
      try 
      { 
       helper.getWishListDao().delete(wishList); 
      } catch (SQLException e) 
      { 
       e.printStackTrace(); 
      } 
     } 


     public void updateWishList(WishList wishList) 
     { 
      try 
      { 
       helper.getWishListDao().update(wishList); 
      } catch (SQLException e) 
      { 
       e.printStackTrace(); 
      } 
     } 

    } 

我的問題是有沒有什麼辦法來實例化DatabaseHelper,而無需創建一個測試活動,並把它當作是DatabaseHelper需要語境? 理想情況下,我想單元測試這個類作爲標準JUnit測試,而不是Android JUnit測試

+1

**假設**你的「DatabaseHelper」是「SQLiteOpenHelper」的一個子類,你可以給它傳遞一個_mock context_,例如, 'android.test.mock.MockContext'並通過調用'SQLiteDatabase.openOrCreateDatabase(..)'返回結果來實現模擬的'openOrCreateDatabase'和'getDatabasePath'方法。 – Jens

+0

我是否還需要在模擬器或物理設備中運行?理想情況下,我不想對Android設備有任何依賴。 – MayoMan

+0

'SQLiteDatabase'有很多原生函數,所以你仍然在模擬器上運行。 – Jens

回答

0

我不確定這是個好主意。 ORMLite具有非Android JDBC包,可用於通過JDBC直接驅動Sqlite。但是,如果目標是測試您的Android數據庫類,那麼您將會運行很多非Android代碼,在我看來,這會使測試無效。我被認爲是嘲笑所有的Android類,但它開始成爲不久之後扭曲段落的迷宮。

我認爲你最好的處理方式是忍受Android junit測試。例如,請看ORMLite Android test package files。 [BaseDaoTest文件]具有您可以爲自己的測試定製的所有設置/關閉方法。

相關問題