Ich habe allgemeinere Frage. Welchen Rahmen oder welche Implementierung sollte ich in Grails 2.x verwenden, wenn ich Spock benutze?Untersuchung der Graillen mit Spock - Welches Versprühungsgerüst wählen?
Ich kenne Tonnen von Spott Stil: Hebel Groovy MetaClass, Grails MockFor(), Groovy Mock(), Groovy Schließung Stil, etc. Jeder von ihnen hat seine eigenen Vor- und Nachteile. Aber was ich nicht verstehe, ist, dass ein spöttischer Stil bei bestimmten Gelegenheiten funktioniert, die ich nicht bestimmen kann (d. H. MockFor() funktioniert für bestimmte Implementierungen und nicht für die anderen).
Derzeit habe ich zwei ähnliche Implementierung von Service-Methode spöttisch.
Dies funktioniert:
@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()
}
}
Die Service-Implementierung und von der Steuerung Aufruf ist ganz ähnlich:
@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()
}
}
jedoch diese Umsetzung nicht funktioniert. Was ist also die beste Methode, sich in Grails zu verspotten? Oder gibt es irgendeinen GUTEN Spottrahmen für Grails, der mir die Zeit sparen würde, herauszufinden, wie man spotten kann?
Danke für jede Beratung! :-)
Mateo
Haben Sie Spocks Mock-Framework ausprobiert? Es ist wirklich klar und direkt. Die Spock-Dokumentation sagt, dass sie entweder mit Spock-Mocks oder Groovy-Mocks funktionieren kann, aber warnen Sie davor, die beiden Mock-Frameworks aus irgendeinem Grund zu kombinieren. –
Ja, das wird tatsächlich verwendet, wenn Sie mockFor() aufrufen; grails.plugin.spock.UnitSpec.mockFor() wird aufgerufen. Was ich am nützlichsten fand, ist die direkte MetaClass-Programmierung für Spott- und Groovy-Closures. Das einzige Problem dabei ist, dass MetaClass andere Tests stören kann, wenn Sie es nicht im Abschnitt "Threat-Down" bereinigen. Vielleicht würde Grails 2.3 eine bessere Unterstützung bringen, da der Spock Standard für diese Version wäre ... – kuceram
Wenn die Antwort angemessen ist und Ihren Erwartungen entspricht, dann akzeptieren Sie sie, um anderen zu helfen, aus Ihrer Frage zu lernen. – dmahapatro