0

ここからコードを変更して、私が持っているコードと非常によく似ており、単体テストを作成しようとしています。これをテストするための「最善の方法は何か」をお聞きしたいのですが、まともな単体テストを作成する方法に非常に満足しています! 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

私はおそらくこれに完全に間違ったアプローチをしており、そのようなコードの単体テストを行う「正しい方法」を受け入れます。これは私にとって新しいことなので、ご容赦ください!

4

1 に答える 1

0

テストケースには Spock モックを使用します。単体テスト中に実際のネットワークとのやり取りは必要ないため、これらは非常に簡単です。

Spock モックは、新しい spock docsでかなりよく文書化されています

クライアント側から Web サービスをテストしたい場合は、spock のコンパニオンとしてうまく機能する geb をチェックしてください。Geb はBook of Geb Integration に文書化されています。 Web での統合テストには明らかにより多くの可動部分が含まれているため、サーバー側をモックすることから始めるのは正しいことです。

于 2013-11-06T16:36:03.203 に答える