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 文档中有很好的记录

如果您确实想从客户端测试 Web 服务,请查看 geb,它可以很好地与 spock 配合使用。Geb 记录在《Geb集成测试之书》中,显然涉及更多移动部分,因此您可以从模拟服务器端开始。

于 2013-11-06T16:36:03.203 回答