4

この質問は、この質問と密接に関連しています。違いは、クライアントをモックするという推奨されるアプローチに従うことです。したがって、次のHTTPBuilderを定義しています。

protected readUrl() {
    def http = new HTTPBuilder("http://example.com")
    def status = http.request(Method.GET, ContentType.JSON) {req ->
        response.success = {resp, json ->
            result = json.toString()
            new Success<String>(result)
        }
        response.'401' = {resp ->
            final String errMsg = "Not Authorized"
            new Failed(Failable.Fail.ACCESS_DENIED, errMsg)
        }
        response.failure = {resp ->
            final String errMsg = "General failure ${resp.statusLine}"
            new Failed(Failable.Fail.UNKNOWN, errMsg)
        }
    }
}

私がやりたいのは、このコードブロックをユニットテストする方法を見つけることです。可能であれば、応答コードを具体的に設定できるように、応答をモックしたかったのです。誰かが私にこれを行う方法を教えてもらえますか?

4

1 に答える 1

1

これは私の好みの解決策です:

class MockHTTPBuilder{
    MockHTTPBuilder(string){}
    MockHTTPBuilder(){}
    def pleaseFail = false
    def mockData = []
    def request(a, b, c){
        if(pleaseFail) [status:'500',data: mockData ?: "It failed :("]
        else [status:'200',data: mockData ?: "Yay :)"]
    }
}

使用例を次に示します:http ://groovyconsole.appspot.com/script/760001

または、実際のhttpClientインスタンスをメタプログラミングして、期待どおりに動作させることもできます(テスト時に強制的に失敗または合格)が、少し複雑になります。

于 2012-09-28T15:14:31.017 に答える