Unit testing 如何在Grails(Spock)中模拟用于单元测试的服务器?

Unit testing 如何在Grails(Spock)中模拟用于单元测试的服务器?,unit-testing,grails,service,groovy,spock,Unit Testing,Grails,Service,Groovy,Spock,我编写了这个简单的服务,用于通过HTTPBuilder执行子请求,以获取表示所获得页面的类实例,以供进一步使用: 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 =

我编写了这个简单的服务,用于通过HTTPBuilder执行子请求,以获取表示所获得页面的类实例,以供进一步使用:

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
    }
}
cmspage包
导入groovyx.net.http.HTTPBuilder
导入静态groovyx.net.http.Method.GET
导入静态groovyx.net.http.ContentType.HTML
类CmsPageService{
静态事务=false
最终字符串SUBREQUEST_HOST=“www.mydomainforsubrequest.com”
CmsPage getCmsPageInstance(对象请求){
String host=request.getServerName()
字符串url=request.getRequestURI()
HashMap queryMap=this.queryStringToMap(request.getQueryString())
返回此.subRequest(主机、url、查询映射)
}
CmsPage getCmsPageInstance(字符串主机、字符串url、字符串queryString=null){
HashMap queryMap=queryStringToMap(queryString)
返回此.subRequest(主机、url、查询映射)
}
私有CmsPage子请求(字符串主机、字符串url、HashMap queryMap=null){
CmsPage cmsPageInstance=新的CmsPage()
HTTPBuilder http=newhttpbuilder()
请求(“http://”+SUBREQUEST_HOST,GET,HTML){req->
uri.path=url
uri.query=queryMap
标题。“X-Original-Host”=“www.mydomain.com”
response.success={resp,html->
cmsPageInstance.responseStatusCode=响应状态
如果(各自状态<400){
cmsPageInstance.html=html
}
}
response.failure={resp->
cmsPageInstance.responseStatusCode=响应状态
返回空
}
}
返回cmsPageInstance
}
私有HashMap queryStringToMap(字符串queryString){
如果(查询字符串){
queryString=queryString.replace(“?”,“”)
String[]splitToParameters=queryString.split(“&”)
HashMap queryMap=newhashmap()
拆分参数{
String[]split=it.split(“”)
对于(int i=0;i
现在我需要为这个服务编写单元测试。我想使用一些简单的html文档来测试它,而不是测试一些“实时”站点。但我不知道怎么做? 有人能帮我吗?

应该适合你。检查它的文档和这个