Unit Testing DatabaseOpenHelper di classe in Android

7

Ho scritto diversi test unitari per una classe DatabaseOpenHelper già esistente. Ho coperto lo scenario di creazione e migrazione dal vecchio schema a quello nuovo. Sfortunatamente, non ritengo che i miei test siano buoni. Ad esempio, per la creazione di DB, controllo che SQLiteDatabase. execSQL() sia stato chiamato tre volte (abbiamo finora tre tabelle) e che la stringa di query sia in set di stringhe SQL specificate.

Il problema fino ad ora - se qualcuno cambia l'ordine delle colonne, il test fallirà. Probabilmente questo è OK.

Ma quali sono gli altri modi per testare le unità dello schema SQL? Oppure non hai test unitari per questo, e fai affidamento solo su quello di integrazione?

    
posta Eugen Martynov 29.12.2012 - 19:55
fonte

3 risposte

1

Invece di verificare che

  • colum1 è name,
  • colum2 è il compleanno,
  • colum3 è ....

testerei solo se queste colonne esistono dopo l'aggiornamento.

Per fare questo vorrei creare un test di integrazione che

  • inizia con un file di database che ha una vecchia versione del database,
  • esegui l'aggiornamento e poi
  • esegue una selezione sql per ogni tabella con tutti i campi.

Esempio:

  • seleziona nome, data di nascita, numero di telefono del cliente
  • seleziona orderid, orderdate, customerid dall'ordine

Test-Successo significa che non esiste alcuna eccezione per database per tabella o campo sconosciuti.

[Aggiornamento 2.2.2013] L'unittesting del DatabaseOpenHelper (Unittest = Testing in isolamento) richiederebbe di testare senza un vero database e verificare che lo script di aggiornamento del database sia valido o almeno che contenga tutti i campi / tabelle necessari. Secondo me questo è molto lavoro. I test di integrazione con un vero database sono molto più semplici.

    
risposta data 30.12.2012 - 15:51
fonte
0

Un confronto tra schemi potrebbe essere utile. Si dispone di un database noto per avere lo schema "corretto". Questa potrebbe essere una copia del database di sviluppo dopo un blocco del codice. Quindi crea il tuo nuovo database. Utilizzare uno strumento di confronto per identificare eventuali differenze tra i 2 database. Microsoft Visual Studio viene fornito con uno strumento di confronto dello schema. Esistono diversi strumenti di terze parti. Io uso il mio strumento di confronto personalizzato che elenca tutte le differenze in 2 database.

In alternativa puoi semplicemente controllare se gli script di creazione dello schema vengono eseguiti senza errori. Gli script ARE sono la definizione dello schema, quindi in teoria non è necessario confrontare o controllare nient'altro che il fatto che siano stati eseguiti senza errori.

Ma nella mia esperienza le persone introducono modifiche a un database senza scriverle. Uno strumento di confronto può catturare queste modifiche non scritte.

    
risposta data 29.01.2013 - 22:12
fonte
0

Quando ho affrontato questo problema, la strada che ho percorso mi ha mandato direttamente a verificare la frase di definizione del database con quella prevista. Questo è stato confrontando ampiamente una stringa con un'altra.

Ho riconosciuto quanto fosse assurdo quando mi sono ritrovato a ottenere la frase dall'esecuzione del codice, controllandola manualmente nel blocco note e inserendola nel test ogni volta che ho apportato una modifica allo schema.

In questo momento utilizzo il test di integrazione per la convalida dello schema. Nel mio caso, ciò comporta l'esercizio di tutte le operazioni relative alla persistenza (escluse quelle correlate alla performance).

Non mi piace il tempo richiesto per questo approccio, ma è il miglior approccio giusto che ho trovato.

    
risposta data 01.02.2013 - 19:11
fonte

Leggi altre domande sui tag