Groovy的HTTPBuilder嘲讽客户端(Groovy HTTPBuilder Mocking

2019-09-22 17:59发布

这个问题是密切相关的这个问题 。 不同的是,我想关注的嘲讽客户端的推荐的方法。 所以,我有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)
        }
    }
}

我想要做的是找到一种方法,单元测试的代码块。 我想嘲笑回应,所以我可以专门设置的响应代码,如果可能的话。 可能有人请告诉我一个办法做到这一点?

Answer 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的实例,并使其行为符合预期(forcebly失败或在测试时间的流逝),但是这是一个稍微复杂一些。



文章来源: Groovy HTTPBuilder Mocking the Client