2016-03-02 13 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

Вы уверены, что обновите свой SQLiteOpenHelper где-то внутри вашего класса DBHelper? По внешнему виду это синглтон, поэтому я могу предположить, что вы не воссоздаете его каждый раз. Вы должны сделать это в своем методе @Before, потому что идея использования RenamingDelegatingContext заключается в том, что он удаляет старые базы данных, прежде чем открывать новую.

Также целесообразно закрыть класс SQLiteOpenHelper после испытаний. Что-то вроде:

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

Если это не работает, пожалуйста, напишите свой DBHelper класс, чтобы убедиться, что это нормально.

+0

Это хороший улов. Я использую шаблон singleton для моего вспомогательного класса. Грета благодарю вас. –

+0

Есть ли способ, которым я могу создать отдельную тестовую базу данных только для тестирования, а затем уничтожить ее при разрыве. Таким образом, я не касаюсь производственной базы данных? –

+0

Точно использование 'RenamingDelegatingContext' - это путь. Когда вы используете этот контекст в 'SQLiteOpenHelper', он создаст тестовую базу данных, которая не имеет ничего общего с вашим реальным! Если бы ответ помог вам, возможно, вы сможете его продвинуть - таким образом, другие люди узнают, что это решение. – Vesko

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