2010-05-24 16 views
7

Mi piacerebbe testare una chiusura "withCriteria" e non sono sicuro di come procedere. Vedo come prendere in giro la chiamata conCriteria, ma non testare il codice all'interno della chiusura. Durante l'esecuzione del test che esegue "withCriteria", continuo a ricevere MissingMethodException, anche se il codice funziona correttamente nel normale flusso di esecuzione. Qualche idea? Grazie! SteveGrails withCriteria testing

risposta

14

Non vorrei seguire questa strada. Invece avrei spostato la query nella classe di dominio come metodo di ricerca statica e l'ho testata direttamente in un test di integrazione con dati reali. Quindi puoi facilmente prendere in giro il metodo helper quando viene chiamato in un controller o test di servizio.

class YourDomainClass { 

... 
    static List<YourDomainClass> findFooBar() { 
     YourDomainClass.withCriteria { 
     ... 
     } 
    } 
} 

Poi, in una prova di unità:

def results = [instance1, instance2, instance3] 
YourDomainClass.metaClass.static.findFooBar = { -> results } 

In questo modo si prova che la query funziona contro il database in memoria in un test di integrazione, ma è facile prendere in giro in unit test.

0

Al momento non esiste un'implementazione fittizia per i criteri di Ibernazione. Dovrai utilizzare i test di integrazione. Tuttavia, la raccomandazione di Burt di rendere questo un metodo di ricerca statico è buona per l'organizzazione del codice. Si dovrebbe anche guardare le query denominate, descritte a http://www.grails.org/1.2+Release+Notes, per una sintassi corretta per questo.

1

seguito alla risposta di Burt, controlla query denominate come descritto qui:

http://blog.springsource.com/2010/05/24/more-grails-1-3-features/

È quindi possibile prendere in giro la proprietà/accesso metodo nella unit test come descritto da Burt.

+3

Le query denominate sono grandi, ma non ero in grado di prendere in giro loro nei test di unità. Hai funzionato o ti sei bloccato con i test di integrazione? – j4y

1

Poiché nessuno ha menzionato l'opzione per creare una DSL per eseguire altri DSL, ecco una descrizione completa di questo metodo. Lo uso abbastanza spesso con ottimi risultati.

Groovy/Grails testing DSLs