Ho una domanda più generale. Quale framework o implementazione dovrei usare per il mocking in Grails 2.x quando si usa Spock?Grails Test con Spock: quale quadro di simulazione selezionare?
Conosco un sacco di stile di derisione: utilizzo di Groove metaClass, Grails mockFor(), Groovy Mock(), stile di chiusura Groovy, ecc. Ognuno di essi ha i suoi vantaggi e svantaggi. Ma quello che non capisco è che in certe occasioni alcuni stili di derisione non sono in grado di determinare (ad esempio, mockFor() funziona per determinate implementazioni e non per gli altri).
Attualmente ho due implementazione simile del metodo di servizio mocking.
Questo funziona:
@TestFor(MyController)
@Mock([MyDevice])
class MyControllerSpec extends ControllerSpec {
void "test st."() {
def myService = mockFor(MyService)
myService.demand.myMethod() { def st ->
return "test"
}
controller.myService = myService.createMock()
}
}
Tuttavia, questa implementazione non funziona:
@TestFor(MyController)
@Mock([MyDevice])
class MyControllerSpec extends ControllerSpec {
void "test st."() {
def yourService = mockFor(YourService)
yourService.demand.yourMethod() { def st ->
return "test"
}
controller.yourService = yourService.createMock()
}
}
L'implementazione del servizio e chiamare dal regolatore è abbastanza simile. Quindi qual è la migliore pratica di derisione in Grails? O c'è qualche BUONA struttura di derisione per Grails che mi farebbe risparmiare tempo a capire come scherzare?
Grazie per qualsiasi consiglio! :-)
Mateo
Hai provato l'infrastruttura finta di Spock? È davvero chiaro e diretto. I documenti di Spock dicono che può funzionare con Spock Mocks o Groovy Mocks, ma avverti di non provare a combinare i due framework di simulazione per qualche motivo. –
Sì, questo è in realtà ciò che verrà utilizzato quando si chiama mockFor(); grails.plugin.spock.UnitSpec.mockFor() viene chiamato. Quello che ho trovato più utile è usare direttamente la programmazione di metaClass per il mocking e le chiusure groovy. L'unico problema con questo è che metaClass potrebbe interferire con altri test quando non lo si pulisce nella sezione di minacce in basso. Forse Grails 2.3 potrebbe offrire un supporto migliore in quanto Spock sarebbe di default per questa versione ... – kuceram
Se la risposta è appropriata e soddisfa le tue aspettative, accettala per aiutare gli altri a imparare dalla tua domanda. – dmahapatro