2014-03-13 117 views
1

我写了这个简单的服务通过HTTPBuilder做子请求,以获得代表取得的页进一步使用类的实例:如何在Grails(Spock)中模拟服务器进行单元测试?

package cmspage 

import groovyx.net.http.HTTPBuilder 
import static groovyx.net.http.Method.GET 
import static groovyx.net.http.ContentType.HTML 

class CmsPageService { 
    static transactional = false 
    final String SUBREQUEST_HOST = "www.mydomainforsubrequest.com" 

    CmsPage getCmsPageInstance(Object request) { 
     String host = request.getServerName() 
     String url = request.getRequestURI() 
     HashMap queryMap = this.queryStringToMap(request.getQueryString()) 
     return this.subRequest(host, url, queryMap) 
    } 

    CmsPage getCmsPageInstance(String host, String url, String queryString = null) { 
     HashMap queryMap = queryStringToMap(queryString) 
     return this.subRequest(host, url, queryMap) 
    } 

    private CmsPage subRequest(String host, String url, HashMap queryMap = null) { 
     CmsPage cmsPageInstance = new CmsPage() 
     HTTPBuilder http = new HTTPBuilder() 
     http.request("http://" + SUBREQUEST_HOST, GET, HTML) { req -> 
      uri.path = url 
      uri.query = queryMap 
      headers.'X-Original-Host' = 'www.mydomain.com' 
      response.success = { resp, html -> 
       cmsPageInstance.responseStatusCode = resp.status 
       if (resp.status < 400) { 
        cmsPageInstance.html = html 
       } 
      } 
      response.failure = { resp -> 
       cmsPageInstance.responseStatusCode = resp.status 
       return null 
      } 
     } 
     return cmsPageInstance 
    } 

    private HashMap queryStringToMap(String queryString) { 
     if (queryString) { 
      queryString = queryString.replace("?", "") 
      String[] splitToParameters = queryString.split("&") 
      HashMap queryMap = new HashMap() 
      splitToParameters.each { 
       String[] split = it.split("=") 
       for (int i = 0; i < split.length; i += 2) { 
        queryMap.put(split[i], split[i + 1]) 
       } 
      } 
      return queryMap 
     } else return null 
    } 
} 

现在我需要编写单元测试这项服务。我想使用一些简单的html文档来测试它,而不是测试一些“实时”网站。但是我不知道怎么做? 任何人都可以帮助我吗?

+0

http://stackoverflow.com/questions/9101084/groovy-httpbuilder-mocking-the-response –

回答

相关问题