10

作成するサービスのテストケースの作成方法を理解しようとしています。

このサービスはHTTPBuilderを使用して、あるURLからの応答を要求します。HTTPBuilderリクエストは、応答の成功または失敗をチェックするだけで済みます。サービスの実装は、次のような単純なものになります。

boolean isOk() {
    httpBuilder.request(GET) {
        response.success = { return true }
        response.failure = { return false }
    }
}

したがって、HTTPBuilderをモックして、テストで応答を成功/失敗のいずれかに設定できるようにしたいので、応答が成功した場合はサービスのisOkメソッドがTrueを返し、応答が成功した場合はFalseを返すと断言できます。失敗。

HTTPBuilderリクエストをモックして、GroovyTestCaseでレスポンスを設定する方法を教えてもらえますか?

4

1 に答える 1

12

HttpBuilderテストケースを処理するモックの最小限の例を次に示します。

class MockHttpBuilder {
    def result
    def requestDelegate = [response: [:]]

    def request(Method method, Closure body) {
        body.delegate = requestDelegate
        body.call()
        if (result)
            requestDelegate.response.success()
        else
            requestDelegate.response.failure()
    }
}

resultフィールドがtrueの場合、successクロージャを呼び出します。それ以外の場合は、を呼び出しますfailure

編集:モッククラスの代わりにMockForを使用した例を次に示します。

import groovy.mock.interceptor.MockFor

def requestDelegate = [response: [:]]
def mock = new MockFor(HttpBuilder)
mock.demand.request { Method method, Closure body ->
    body.delegate = requestDelegate
    body.call()
    requestDelegate.response.success() // or failure depending on what's being tested
}
mock.use {
    assert isOk() == true
}
于 2012-02-01T18:59:16.267 に答える