2015-08-12 11 views
6

Ho una classe di base estesa a tutti i test del mio controller. Questo è impostato in modo che ogni unità di test possa avere il proprio Fixture da cui caricare.Come verificare in Play Framework se un test di unità ha eseguito un inserimento/aggiornamento/eliminazione di un database

Quindi l'override di @Before verificherà quale è l'apparecchiatura richiesta per il test, lo carica e quindi avvia il test.

Il problema qui è che questo ricarica l'apparecchio ogni volta. Anche se il metodo ha fatto solo una selezione sul database, senza modificare nulla.

Il database di memoria interna utilizzato da Play Framework è il database H2. Mi chiedo se ci sia un modo per controllare dopo che è stato fatto un test unitario, se c'è stata una modifica al database e in caso contrario, saltare il ricaricamento degli stessi dati.

Ho provato identity_scope, restituisce null indipendentemente da cosa.

+0

Non so se v'è la possibilità di raggiungere con il solo Junit di ma c'è uno strumento in cui è possibile gestire facilmente questo caricamenti. La sua dbunit e puoi facilmente usarla in gioco. Per quanto ne so, lo scopo principale di Junit è separare i test l'uno dall'altro. ma non sto dicendo che non è possibile Forse potresti provare con @BeforeClass con la combinazione con la suite di test. –

+0

L'ho cercato e sembra che dovrei rifattorizzare tutti i miei test unitari esistenti per questo. Grazie per il suggerimento, ma non posso dedicare tempo a questo. – KdgDev

+0

Hai considerato di passare dal database di memoria al vero database fisico? –

risposta

2

H2 non ha la possibilità di controllare quando sono state applicate le ultime modifiche. Tuttavia si può solo fare una colonna aggiuntiva che consente di risparmiare l'ultima volta modifica con

CREATE TABLE TEST(ID INT, NAME VARCHAR, LAST_MOD TIMESTAMP AS NOW()); 

in questo modo si potrebbe risparmiare un tempo di avvio di prova e quindi interrogare il DB se ci sono le date di modifica dopo l'ora di inizio del test.

non vedo nessun altro modo possibile

+0

Suppongo che sia l'idea migliore, ma impiegherei molto tempo per assicurarmi che queste colonne esistano sempre solo mentre i test unitari sono in esecuzione e vengono automaticamente compilati quando avviene un inserimento. Il che mi ricorda: che ne dici di una cancellazione? Come faccio a tenere traccia del fatto che è stata cancellata una cancellazione? – KdgDev

+0

Con la query che ho postato cambierà automaticamente la data/ora in tempo reale su qualsiasi modifica perché AS NOW() esegue ogni volta che viene modificato il record. Creare campi aggiuntivi sui test non è una buona idea, ma direi che la colonna aggiuntiva non farà grandi differenze per l'intero programma. Anche se fosse solo a scopo di test –

+0

Ok. Ma che dire dell'eliminazione di una riga in un test e poi aspettarsi che ci sia nel prossimo? Eppure, funziona solo se so quale tabella testare. Quello di cui ho veramente bisogno è un modo per rilevare se una tabella nell'intero DB è stata modificata. – KdgDev

Problemi correlati