2010-05-25 8 views
9

È possibile eseguire rapidamente test di integrazione singola/completa in una classe rapidamente in Grails. L'app di test include un pesante bagaglio di compensazione di tutti i file compilati e genera report di cobertura, quindi anche se eseguiamo un test di integrazione singolo, l'intera base di codice viene compilata, strumentata e il report di cobertura viene generato. Per la nostra applicazione ci vogliono più di 2 minuti.Esecuzione rapida di test di integrazione singola in Grails

Se fosse possibile eseguire rapidamente un test di integrazione e ottenere un rapido feedbck, sarebbe estremamente utile.

Inoltre, è importante pulire tutti i file compilati una volta completato il test? Questa pulizia va bene se eseguiamo l'intero set di test di integrazione, ma se avremo intenzione di eseguire uno o due test in una classe questa pulizia e ricompilazione sembra essere un grande collo di bottiglia per un feedback più rapido agli sviluppatori.

Grazie

risposta

5

Esso è l'intenzione del test di integrazione per fare tutta questa compilazione, la creazione di data base, di partenza del server, ecc, perché i test devono essere eseguiti in un ambiente integrato, come suggerisce il nome.

Forse è possibile estrarre alcuni test ai test unitari. Questi è possibile eseguire in Eclipse.

È possibile disattivare Cobertura inserendo il seguente codice nel tuo graal-app/conf/BuildConfig.groovy:

coverage { 
    enabledByDefault = false 
} 
+0

La cobertura ha avuto il problema. Stavamo usando il plug-in di cobertura e il plugin ha ripulito tutte le fonti compilate dopo che il rapporto è stato generato, questo ci ha impedito di sfruttare tutti i vantaggi associati alla compilazione incrementale. Inoltre, l'esecuzione di uno o due test non richiede un rapporto di cobertura completo per noi e il test di integrazione ha funzionato rapidamente una volta disabilitato. Grazie per il puntatore. – Prakash

15

Se si dispone di una classe di test di integrazione

class SimpleControllerTests extends GrailsUnitTestCase { 
    public void testLogin() {} 
    public void testLogin2() {} 
    public void testLogin3() {} 
} 

È possibile eseguire solo un test in questa classe utilizzando:

grails test-app integration: SimpleController.testLogin 

Tuttavia, sarà comunque necessario eseguire il ti mi è richiesta penalità per i test di integrazione (caricamento config, connessione a DB, istanze di Spring bean, ecc.)

Se si desidera eseguire rapidamente i test, provare a scrivere test di unità anziché test di integrazione.

+0

L'esempio di test in esecuzione funziona, è necessario solo il percorso completo per la classe –

0

Come hai affermato, la maggior parte del tempo è la configurazione dell'ambiente dell'applicazione, l'iniezione di fagioli e l'esecuzione delle annotazioni dinamiche della classe. Puoi accelerare il tuo ciclo di test di integrazione caricandolo solo una volta, eseguendo i tuoi test nella REPL dei grails.

Tuttavia, il compromesso è che ci sono problemi di ricarica dinamici nel REPL. Se vedi stranezze casuali, esci da REPL e ricarica.

$> ./grailsw --plain-output 
|Loading Grails 2.5.3 
|Configuring classpath 
|Enter a script name to run. Use TAB for completion: 
grails> test-app -integration 
... (loads some things) 
... 
grails> test-app -integration 
... (faster loading) 

E per risolvere le altre commentatori - test di integrazione sono utili come bene, c'è un codice che non può essere testato con un test di unità (per esempio, i test HQL o query SQL).

Problemi correlati