我修改了here中的代码,看起来非常像我的代码,并且正在尝试创建单元测试。虽然我会喜欢询问“测试这个的最佳方法”,但我会非常满意任何方式来创建一个像样的单元测试!我查看了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
我可能完全错误地接近了这一点,并且将对开展单元测试此类代码的“正确方法”持开放态度。请耐心等待,因为这对我来说是新的!
答案 0 :(得分:0)
我会将Spock mock用于您的测试用例。它们应该非常简单,因为在单元测试期间您不需要任何实际的网络交互。
Spock模拟很好地记录在案 the new spock docs
如果您确实想要从客户端测试Web服务,请查看geb,它可以作为spock的伴侣。 Geb记录在the Book of Geb中。网上集成测试显然涉及更多移动部件,因此您可以通过模拟服务器端来开始。