2014-06-23 45 views
1

如何在robolectric 2.3中使用本地(文件系統上的DB)SQLiteDatabase?互聯網上的所有解決方案均參考robolectric < 2.3。Robolectric:使用本地SQLiteDatabase

我想這樣做,因爲robolectric在第二個或第三個測試中找不到創建的表。

+0

曾看過[此問題](http://stackoverflow.com/questions/19690811/)?它解釋瞭如何爲每個測試用例使用新的內存數據庫。這會有幫助嗎? – Daniel

+0

你解決了這個問題嗎?如果是這樣,請選擇一個答案。 –

回答

1

我找到了解決方案使用特定的註釋:

import org.robolectric.util.DatabaseConfig.UsingDatabaseMap; 
import org.robolectric.util.DatabaseConfig.DatabaseMap; 
.... 
@RunWith(RobolectricTestRunner.class) 
@UsingDatabaseMap(DbMap.class) 
public class GenericTest{....} 

類DbMap必須實現

class DbMap implements DatabaseMap 
{ 
    private static final String localDb = "/Users/elcapitano/temp/myDb.db"; 


    public String getDriverClassName() 
    { 
     return "org.sqlite.JDBC"; 
    } 


    public String getSelectLastInsertIdentity() 
    { 
     return "SELECT last_insert_rowid() AS id"; 
    } 


    public int getResultSetType() 
    { 
     return ResultSet.TYPE_FORWARD_ONLY; 
    } 

    public String getConnectionString(File arg0) 
    { 
     return String.format("jdbc:sqlite:%s", localDb); 
    } 
} 

此外「DbMap.localDb」的位置是一樣的通過初始化期間DB 'SQLiteDatabase.openOrCreateDatabase(dbFile.getAbsolutePath(),null);'。也許這不相關。

在此之後,您可以在roboletric中使用本地文件-DB!