2017-03-16 4 views
0

Ich arbeite mit Grails 2.4.5 und kämpfe um Grails, um verschiedene Ausnahmetypen abzugrenzen.Grails Spock-Test für eine bestimmte Ausnahme

Angenommen, ich möchte, dass die unten verspotten:

class FooController { 
def barService 
... 
def fooAction() { 
try { 
barService.someMethod(params) 
} catch(e) { 
if (e instanceof FooException) { ... } 
else if (e instanceof BarException) { ... } 
else { ... } 
} 
} 

den Test unter

@TestFor(FooController) 
    class FooControllerSpec extends Specification { 
    def setup() { controller.barService = Mock(BarService) } 
    void "test"() { 
     given: "a mock dependency" 
     1* controller.barService.someMethod(_) >> { -> throw FooException('foo') } 

     when: "the action is requested" 
     controller.fooAction() 

     then: "expect the FooException behaviour from the action" 
     // some behaviour 
    } 

Da ich die FooException innerhalb der mock Abhängigkeit Schließung erwarten würde

geworfen haben

jedoch das Debuggen zeigt das folgende stattdessen:

groovy.lang.MissingMethodException: No signature of method: somePackage.FooControllerSpec$_$spock_feature_0_9_closure14.doCall() is applicable for argument types: (java.util.Arrays$ArrayList) values: [[[:]]] 

Ist das ein Fehler? Gibt es eine Möglichkeit, verschiedene Ausnahmen auf die oben beschriebene Weise zu verspotten?

Antwort

0

Sie müssen Verhalten im then Block, also angeben:

void "test"() { 
    when: "the action is requested" 
    controller.fooAction() 

    then: "expect the FooException behaviour from the action" 
    1 * controller.barService.someMethod(_) >> { -> throw new FooException('foo') } 
    response.redirectedUrl == "/some/other/path" 
} 
+0

die Sache ist, die Ausnahmen bei der Umsetzung innerhalb der Aktion behandelt. Der Controller sprudelt sie nicht vom Design auf. Hätte man das 'catch (e)' in 'throw e' verwandelt, könnte man testen, ob die Aktion die Ausnahme ausgelöst hat. Leider ist diese Option hier nicht verfügbar. –

+0

Was macht es im Fall einer FooException? –

+0

Normalerweise so etwas wie eine Umleitung zu einer Abmeldung. –

Verwandte Themen