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字段为真,它将调用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 回答