簡體   English   中英

如何在Grails(Spock)中模擬用於單元測試的服務器?

[英]How can I simulate server for Unit test in Grails (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 = 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文檔對其進行測試,而不是測試某些“實時”網站。 但是我不知道怎么做? 有誰能夠幫助我?

賈德勒(Jadler)應該適合您。 檢查它的文檔和有關基本用法的這篇文章

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM