2012-02-01 19 views
7

私が書くつもりのサービスのテストケースを書く方法を理解しようとしています。Groovy HTTPBuilderレスポンスを模倣して

サービスは、HTTPBuilderを使用して一部のURLからの応答を要求します。 HTTPBuilderリクエストでは、成功または失敗のレスポンスを確認するだけです。私は私があることを主張することができますので、私のテストの成功/失敗のいずれかに応答を設定することができるようにHTTPBuilderを模擬することができるようにしたい、そう

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

:サービスの実装は、のような単純なものになります私のサービスのisOkメソッドは、応答が成功するとTrueを返し、応答が失敗した場合はFalseを返します。

HTTPBuilderリクエストを模擬してGroovyTestCaseでレスポンスを設定する方法について、助けてもらえますか? resultフィールドがtrueの場合

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() 
    } 
} 

が、それ以外failuresuccessクロージャを呼び出します:

答えて

10

はここでテストケースを処理するモックHttpBuilderの最小限の例です。

EDIT:返信用

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 
} 
+0

ありがとう:ここでは代わりにモッククラスのMockForを使用した例です。私はtrue/falseに '結果'を設定するものは理解していません。これはモックよりスタブのようなものではないでしょうか? – C0deAttack

+0

テストを設定するときは、結果を自分で設定する必要があります。例えば。 '新しいMockHttpBuilder(結果:真)'。私はgroovy mockingを使用する代替案を追加しました。 – ataylor

+0

Ataylorのレスポンスは良いですが、レスポンスのステータスを直接設定し、それを使ってマッピングから正しいクロージャを実行することを除いて、ほとんど同じ実装を思いつきました。しかし、これは本当にスタブ・モッキングです。私は正しいアプローチは、応答を与えるクライアントを模擬することだと思う。 – Gepsens

関連する問題