2017-03-16 8 views
0

私はGrails 2.4.5と一緒に作業しており、Grailsにさまざまな例外タイプを説明するのに苦労しています。特定の例外に対するGrails Spockテスト

私は以下のモックとしたいとします

私はモックの依存クロージャ内FooExceptionは、デバッグ、しかし

を投げていることを期待する

@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 
    } 

以下の試験を考える

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

代わりに以下を示します:

これはバグですか?上記の方法で異なる例外を模倣する方法はありますか?

答えて

0

あなたはすなわち、thenブロック内の動作を指定する必要があります。

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

事は、実装で例外がアクション内で処理されています。コントローラーは設計上、バブリングしていません。アクションが例外をスローしたかどうかをテストできるcatch(e)がスローされました。残念ながら、そのオプションはここでは利用できません。 –

+0

FooExceptionの場合はどうなりますか? –

+0

通常、ログアウトへのリダイレクトのようなものです。 –

関連する問題