Quali sono le migliori pratiche per popolare e utilizzare un database di test?

8

Quindi, sto sviluppando alcuni servizi Web RESTful Java basati su database, utilizzando Hibernate e MySQL. A scopo di test, sto usando il database in memoria H2. H2 è bello e veloce, quindi ha funzionato molto bene. L'unico problema è che compilare le tabelle DB prima dei miei test è un po 'noioso. Fondamentalmente creo e mantengo un mazzo di oggetti a mano. Mi chiedo se forse sto andando giù per la strada sbagliata.

Per favore dimmi, quali sono le migliori pratiche per fare ciò che sto cercando di fare? Qualche strumento che potrebbe aiutarmi? Qualche strategia o suggerimento generale?

    
posta sangfroid 21.07.2011 - 21:04
fonte

4 risposte

4

Immagino che tu abbia progettato la tua API in modo che tu possa DIimpostare i dettagli del tuo DB, altrimenti potremo aiutarti a farlo.

In termini di terminologia, stai utilizzando un falso doppio di prova . In questo caso particolare, consiglierei di utilizzare lo stesso DB in memoria (H2), ma utilizzare DBUnit per lavorare con JUnit in ordine per creare le tue tabelle, popolarle prima di ogni test, troncare i dati dopo ogni test e infine eliminare le tabelle una volta che hai finito TestSuite.

Esistono altre soluzioni come Grails e Spring Roo che creano per te alcuni dati di test, ma DBUnit funzionerà per te ora.

    
risposta data 21.07.2011 - 21:27
fonte
1

Forse trarrai vantaggio dall'utilizzo di una struttura di simulazione nei test delle unità automatizzate?

Ci sono diversi tipi tra cui scegliere:

risposta data 21.07.2011 - 21:10
fonte
1

Tutto quello che puoi veramente fare è perseguire oggetti a mano o avere un database precostruito che carichi. Devi anche assicurarti che il database sia resettato dopo ogni test.

In un progetto a cui sto lavorando Sono nuovo in Hibernate quindi ho un sacco di test per le relazioni di base e le operazioni a cascata. Usando TestNG ho una classe GenericHbTest da cui provengono tutti i test di Hibernate. Ha un metodo @BeforeMethod che riesporta lo schema db e alcuni metodi di utilità per la generazione di vari oggetti DAO. Questo mi consente di personalizzare un ambiente per ogni test.

L'unico svantaggio di riesportare lo schema ogni test è che ci vuole molto tempo per terminare l'esecuzione dei test. Ma ho solo bisogno di essere sicuro che tutto sia separato e pulito. Se hai più esperienza con Hibernate e disponi di uno schema più stabile, la riesportazione prima di ogni test è probabilmente superflua. Almeno, comunque, cancella tutte le tabelle in anticipo

    
risposta data 21.07.2011 - 21:23
fonte
1

Hai preso in considerazione la serializzazione degli oggetti? Questo è il metodo più veloce e semplice che ho usato.

Consiste nel creare lo stato desiderato, serializzarlo su disco. Questi file vengono utilizzati per popolare il database in memoria che si utilizza per i test.

Uno dei vantaggi è che puoi modificare i file manualmente in seguito.

In alternativa, se sei ben organizzato nei tuoi test unitari, potresti creare generatori di oggetti. All'avvio dei test, il database viene istanziato e lo schema viene esportato (utilizzando nHibernate). Gli oggetti sono generati e popolati nel database.

Questo metodo ha un vantaggio rispetto al primo: i tuoi generatori di oggetti si evolvono con il tuo codice, quindi non devi preoccuparti dei tuoi file come nel precedente suggerimento.

    
risposta data 21.07.2011 - 21:24
fonte

Leggi altre domande sui tag