2016-03-02 66 views
2

我想爲我的應用程序數據庫編寫測試用例。這是我的設置方法做:RenamingDelegatingContext不創建測試數據庫

@Before 
    public void testCaseSetUp() { 
     RenamingDelegatingContext context = new RenamingDelegatingContext(getTargetContext(), "test_"); 
     dbController = new DBController(context); 
     dbController.open(); 
    } 

DBController.java

public DBController(Context c) { 
      context = c; 
     } 

     public DBController open() throws SQLException { 
      dbHelper = DBHelper.getInstance(context); 
      database = dbHelper.getWritableDatabase(); 
      return this; 
     } 

RenamingDelegatingContext不創建一個新的測試數據庫,而不是使用現有的數據庫文件。這導致我的測試用例失敗,因爲我已經有了數據。

回答

3

您確定您在DBHelper課程內的某個位置重新創建了SQLiteOpenHelper嗎?從它的外觀來看,後者是一個單身人士,所以我可以假設你不是每次都重新創建它。您應該在您的@Before方法中這樣做,因爲這裏使用RenamingDelegatingContext的想法是在打開新數據庫之前刪除舊數據庫。

此外,在您的測試後關閉SQLiteOpenHelper類是一種好習慣。喜歡的東西:

@After 
public void tearDown() { 
    dbHelper.close(); 
} 

如果這不起作用,請發表您的DBHelper類,以驗證它的確定。

+0

這是一個很好的結果。我爲我的助手類使用了單例模式。葛麗塔謝謝你。 –

+0

有沒有一種方法可以創建一個單獨的測試數據庫來進行測試,然後在拆解時將其銷燬。這樣我就不會觸碰生產數據庫? –

+0

正確使用'RenamingDelegatingContext'是要走的路。當你在'SQLiteOpenHelper'中使用這個上下文時,它會創建一個與你的真實無關的測試數據庫!如果答案對你有幫助,也許你可以讚揚它 - 這樣其他人就會知道這就是解決方案。 – Vesko

相關問題