1

我有一個應用程序使用ContentProvider來提供數據而不是直接訪問數據庫。該應用程序按預期工作,但我有單元測試問題:我如何強制ContentProvider使用測試數據庫而不是「活」的?如果我沒有使用ContentProvider的,我可以通過不同的數據庫名我SQLiteOpenHelper sublass的構造,但現在的數據庫,在我的ContentProvider到的onCreate()的調用創建:使用ContentProvider和數據庫進行Android單元測試

@Override 
public boolean onCreate() 
{ 
    UKMPGDataProvider.init(getContext(), Constants.DATABASE_NAME); 
    return (UKMPGDataProvider.getWritableDatabase() == null) ? false : true; 
} 

,你可以看,數據庫名稱是硬編碼的。

有沒有辦法將測試名稱傳遞給ContentProvider?

回答

0

有點挖後,我發現擴展ProviderTestCase2將前綴自動添加到數據庫中。

+0

因此,對於ProviderTestCase2,是否可以測試MyListContactActivity行爲,而不會搞亂真正的Android Contact ContentProvider?你有任何工作測試代碼? – sancho21 2014-05-29 23:05:27

0

您應該使用dependency injection模式來規避這一

+0

感謝Flexo,但對onCreate的調用來自系統,所以我無法注入任何東西。我可以使用公共標誌來指定我想要創建的數據庫名稱,但它看起來不太優雅。 – barry 2011-12-30 11:37:44