2

サービスのメソッドを呼び出し、リクエストとレスポンスを渡すコントローラーを持つ grails 2.1 アプリがあります。

class FooController {
    def myService
    def anAction() {
        response.setContentType('text/xml')
        myservice.service(request,response)
}

このメソッドの単体テストを行いたいです。そして、GMock (バージョン 0.8.0) を使用してこれを行いたいので、これを試しました。

def testAnAction() {
    controller.myService = mock() {
        service(request,response).returns(true)
    }
    play {
        assertTrue controller.anAction()
    }
}

これは、リクエストに対する期待に失敗したと言って失敗します。

Missing property expectation for 'request' on 'Mock for MyService'

ただし、次のようにテストを記述した場合:

def testAnAction() {
    def mockService = mock()
    mockService.service(request,response).returns(true)
    controller.myService = mockService
    play {
        assertTrue controller.anAction()
    }
}

テストは問題なくパスします。私の知る限り、どちらも GMock 構文の有効な使用法ですが、なぜ最初のものは失敗し、2 つ目は失敗するのでしょうか?

乾杯、

4

1 に答える 1

3

FooControllerTestgrails によって生成されたテスト クラスでテストを記述することを前提としています。

このように、FooControllerTestクラスには便利な属性@TestFor(FooController)を注入することで注釈が付けられます。

ローカル スコープの変数ではなくテスト クラスrequest属性も同様です。

これが、内部クロージャーから到達できない理由です。

次のコードが機能すると確信しています(まだテストしていません):

def testAnAction() {
    def currentRequest = request
    def currentResponse = response
    controller.myService = mock() {
        service(currentRequest,currentResponse).returns(true)
    }
    play {
       assertTrue controller.anAction()
    }
}
于 2013-01-02T23:41:13.920 に答える