这个问题与this question密切相关。不同之处在于我想遵循推荐的模拟客户端的方法。所以,我定义了以下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)
}
}
}
我想要做的是找到一种方法来对这个代码块进行单元测试。我想模拟响应,以便我可以专门设置响应代码,如果可能的话。有人可以告诉我一个方法吗?
答案 0 :(得分: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实例进行元编程,并使其按预期运行(在测试时间内强制失败或通过),但这有点复杂。