2012-09-21 59 views
3

这个问题与this question密切相关。不同的是,我想按照推荐的方式来嘲笑客户。所以,我有以下HTTPBuilder定义:Groovy 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

我实际上是通过嘲笑HTTPBuilder编码的,但我仍然想看看模拟客户端的样子。 –

+0

嘲笑“客户”是什么意思? –

+1

就像这样:http://groovyconsole.appspot.com/script/760001 只需将此模拟设置为您的服务。 – Raphael

回答

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故障或性能测试过程中传递时间),但这有点复杂。