ここからコードを変更して、私が持っているコードと非常によく似ており、単体テストを作成しようとしています。これをテストするための「最善の方法は何か」をお聞きしたいのですが、まともな単体テストを作成する方法に非常に満足しています! 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
私はおそらくこれに完全に間違ったアプローチをしており、そのようなコードの単体テストを行う「正しい方法」を受け入れます。これは私にとって新しいことなので、ご容赦ください!