2015-04-15 35 views
5

Mam Android aplikacji z bazy danych z wersji 1.Jak to zrobić testów jednostkowych migracji bazy danych między wersjami

I dodanej kolumny danych w jednej tabeli i Idi migracji do nowej wersji.

Problemem jest to, jak wykonać testy jednostkowe. Musiałem sprawdzić, czy stare dane są poprawnie wstawione do nowej struktury, a nowa kolumna jest dodana i wypełniona we właściwy sposób.

Jak najlepiej to zrobić? Z góry dziękuję.

Odpowiedz

0

Trzeba test 2 scenariusze:

  1. Użytkownik instaluje nową wersję bezpośrednio.
  2. Użytkownik jest w starszej wersji i przechodzi na nową wersję.

Testowanie drugiego scenariusza jest generalnie trudne.

Co ogólnie zrobić, aby przetestować scenariusz 2 jest:

  1. odinstalować aplikację z telefonu komórkowego.
  2. Przejdę do wersji kodu wersji 1 - Zwróć uwagę, że używam GIT i dlatego bardzo łatwo jest przełączyć na starsze wersje.
  3. Uruchom aplikację na urządzeniu, używając Android Studio.
  4. Utwórz niektóre dane testowe.
  5. Przełącz na wydanie 2 kodu.
  6. Rozpocznij debugowanie w Androidzie Studio. W tym momencie mają punkty przerw w metodach aktualizacji DB, aby zapewnić, że uaktualnienie bazy danych jest płynne.
  7. Kontynuuj z pozostałymi testami.
0

Można utworzyć test case, który tworzy starą wersję bazy danych, a następnie przeprowadzić migrację. Oto uproszczony przykład.

public class DbHelperTest extends AndroidTestCase { 
private SQLiteDatabase db; 

@Override 
public void setUp() throws Exception { 
    super.setUp(); 
    mContext = new RenamingDelegatingContext(getContext(), "db_helper_test_"); 
    SQLiteDatabase.CursorFactory cursorFactory = new SQLiteDatabase.CursorFactory() { 

     @Override 
     public Cursor newCursor(final SQLiteDatabase db, final SQLiteCursorDriver masterQuery, final String editTable, 
           final SQLiteQuery query) { 
      return new SQLiteCursor(db, masterQuery, editTable, query); 
     } 
    }; 
    db = SQLiteDatabase.create(cursorFactory); 

    createV14Db(db); 
} 

@Override 
public void tearDown() throws Exception { 
    super.tearDown(); 
    db.close(); 
} 

private void createV14Db(SQLiteDatabase db) { 
    // Create tables and indices 
    db.execSQL(...); 

    // Create some data 
    db.execSQL(...); 
} 

public void testDbUpgrade() { 
    DbHelper dbHelper = new DbHelper(mContext); 
    dbHelper.onUpgrade(db, 14, 100); 

    // Check that things have been upgraded correctly 
} 
}