我从这里修改了代码,使其看起来非常像我拥有的代码,并且正在尝试为其创建单元测试。虽然我想问“什么是最好的方法”来测试它,但我对任何创建体面的单元测试的方法都非常满意!我查看了 Spock、GroovyTestCase 和 GMock,虽然它们中的每一个都可能非常有能力创建这样的测试,但我发现在所有情况下都缺少此类示例的文档。
class Searcher {
def http = new HTTPBuilder('http://ajax.googleapis.com')
def _executeSearch = { searchQ -> {
req ->
uri.path = '/ajax/services/search/web'
uri.query = searchQ
requestContentType = URLENC
response.success = { resp, reader ->
assert resp.statusLine.statusCode == 200
reader.text
}
response.failure = { resp -> println "FAILURE! ${resp.properties}"
resp.statusLine.statusCode }
}
}
def executeSearch(query) {
// http.setHeaders(Accept: 'application/json') // I want JSON back, but this not important
http.request(GET, _executeGetCommand(query))
}
}
我想要/需要做的是以我可以测试的方式模拟“http”:
1. uri.query is getting properly set via the passed in data
2. calls to response.success return mocked test data
3. calls to failure get executed and return the failure code
我可能完全错误地处理了这个问题,并且将对单元测试此类代码的“正确方式”持开放态度。请耐心等待,因为这对我来说是新的!