Mit Spock stempeln Sie sowohl Gorm als auch andere Methoden in einer Grails-Domain-Klasse

8

Tut mir leid, wenn das eine neue Frage ist, aber ich würde wirklich alle Einsichten schätzen, die die Community in Bezug auf ein Problem mit der folgenden Methode bieten könnte, die ich in einem Grails-Dienst, LocationService habe.

%Vor%

Ich habe eine Domain-Klasse, Request, die neben den Standard-GORM-Methoden auch einige zusätzliche Domain-Methoden, z. die create () Methode unterhalb von

%Vor%

Schließlich habe ich eine Spock-Spezifikation. Ich muss sowohl die Standard-GORM-Methoden als auch einige zusätzliche Domänenlogiken, zB eine statische create-Methode, vortäuschen, um ein gültiges Objekt im zu testenden Code zu erhalten.

Idealerweise würde ich Spock-Mocks verwenden, aber ich kann sie hier nicht verwenden, wie im Post unten von Peter N., sie müssen in den Anrufer und in diesem Fall in die Anfrage (die ich versuche zu verspotten) injiziert werden , wird als lokale Variable in der locate-Methode in LocationService erstellt:

Ссылка

Ich kann auch nicht die Grails 2.x @Mock-Annotation verwenden, obwohl dies die GORM-Methoden verspotten wird. Ich bin nicht sicher, ob ich die zusätzliche statische create () -Methode aus der Request-Klasse stempeln / stubben kann.

Daher habe ich schließlich versucht, die Groovy StubFor / MockFor-Methode zu verwenden, da ich glaube, dass diese beim Aufruf der Testmethode verwendet werden, indem man sie in eine Verwendung schließt (wie unten).

Hier ist die Testspezifikation:

%Vor%

Wenn ich jedoch den Test ausführe, bekomme ich, obwohl die stubbed create-Methode mein Request-Stub-Objekt zurückgibt, einen Fehler bei der Stubbed-Save-Methode:

%Vor%

Könnte irgendjemand bitte darauf hinweisen, was ich hier falsch mache, oder den besten Ansatz vorschlagen, um meinen speziellen Fall zu lösen, wenn ich zusätzliche Methoden sowie GORM-Methoden einer Domänenklasse, die ich nicht direkt in den Code injizieren kann, brauche testen?

Vielen Dank im Voraus,

Patrick

    
Paddy 21.03.2013, 10:16
quelle

1 Antwort

8

Ich glaube, Sie sollten Grails ' @Mock Annotation verwenden können, wie Sie es für die GORM-Methoden erwähnt haben, und dann müssen Sie die statischen Methoden manuell vortäuschen:

%Vor%

Wenn Sie die @Mock Annotation verwenden, wird Grails die Standardmethoden (save / get / dynamic finders) vortäuschen, aber es tut nichts mit zusätzlichen Methoden, die Sie hinzugefügt haben, also müssen Sie diese manuell vortäuschen.

    
Igor 21.03.2013, 14:27
quelle

Tags und Links