2015-04-15 22 views
5

Ho un app Android con un database con la versione 1.Come fare test di unità di migrazione di database tra le release

Ho aggiunto una colonna di dati in una tabella e Idi una migrazione in una nuova release.

Il problema che ho è come fare test unitari per questo. Avevo bisogno di verificare se i vecchi dati sono stati inseriti correttamente nella nuova struttura e la nuova colonna è stata aggiunta e compilata nel modo giusto.

Come farei meglio a fare questo? Grazie in anticipo.

risposta

0

dovete provare 2 scenari: installa

  1. utente nuova versione direttamente.
  2. L'utente è in una versione precedente e si aggiorna alla nuova versione.

La verifica del secondo scenario è generalmente complessa.

Quello che generalmente per testare lo scenario 2 è:

  1. disinstallare l'applicazione dal cellulare.
  2. Passare alla versione di codice della versione 1 - Si noti che utilizzo GIT e quindi è molto semplice passare a versioni precedenti.
  3. Eseguire l'app sul dispositivo utilizzando Android Studio.
  4. Creare alcuni dati di test.
  5. Passare alla versione 2 del codice.
  6. Avvia il debug in Android Studio. A questo punto, avere punti di rottura nei metodi di aggiornamento del DB per garantire che l'aggiornamento del DB sia fluido.
  7. Continuare con il resto del test.
0

È possibile creare un caso di test che costruisca una vecchia versione del database e quindi esegua la migrazione. Ecco un esempio ridotto.

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 
} 
}