1

Я знаю, что Robolectric не использует настоящую базу данных SQLite, которую она использует в базе данных памяти. Но база данных воссоздается каждый раз, когда вызывается getWritableDatabase() или getWritableDatabase().Не воссоздавайте базу данных с помощью robolectric

Есть ли способ сделать Robolectric воссоздать базу данных, скажем только, когда вызывается setUp() или что-то в этом роде?

+0

Я думаю, что ваша база данных находится в папке с активами и когда вы вызываете getWritableDatabase(), каждый раз, когда она копируется в папку базы данных приложения i.e./ data/data//databases /. Проверьте эту ссылку http://stackoverflow.com/questions/20929923/using-robolectric-with-sqliteassethelper/20932670#20932670 –

+0

@ZohraKhan У меня нет базы данных в папке с моими активами. База данных создается в 'onCreate' в моем помощнике (который расширяет класс' SQLiteOpenHelper'). Проблема в том, что Robolectric использует в базе данных памяти, которая воссоздается каждый раз, когда вызывается 'getWritableDatabase()'. Я хочу знать, как я могу изменить это – nikmin

ответ

0

Я скачал источник Robolectric из GitHub и внесены изменения объясняются в ответ на этот вопрос:

Testing SQLite database in Robolectric

В ShadowSQLiteOpenHelper классе я сделал эти изменения:

  • Задаваемые это Поле:

    private static Context previousContext; 
    
  • В конструкторе прибавил:

    if (previousContext == null) { 
        previousContext = context; 
    } else { 
        if(previousContext == context) { 
         return; 
        } else { 
         previousContext = context; 
        } 
    } 
    
  • Изменен метод getDatabase() так:

    private SQLiteDatabase getDatabase() { 
        if (database == null) { 
         database = SQLiteDatabase.openDatabase("path", null, 0); 
         realHelper.onCreate(database); 
        } 
    
        realHelper.onOpen(database); 
        return database; 
    } 
    

И теперь все отлично работает.

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

  • Нет связанных вопросов^_^