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 habenjedoch 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?
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. –
Was macht es im Fall einer FooException? –
Normalerweise so etwas wie eine Umleitung zu einer Abmeldung. –