如何在 Groovy 中使用嵌套闭包进行单元测试(模拟类)



我从这里修改了代码,使其看起来非常像我拥有的代码,并正在尝试为其创建单元测试。 虽然我想问"最好的方法是什么"来测试它,但我会对任何创建一个像样的单元测试的方法都非常满意! 我查看了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

我可能完全错误地接近了这一点,并且将对进行此类代码进行单元测试的"正确方法"持开放态度。 请耐心等待,因为这对我来说是新的!

我会使用Spock mock作为你的测试用例。它们应该非常简单,因为在单元测试期间不需要任何实际的网络交互。

斯波克模拟在新的斯波克文档

如果您确实想从客户端测试 Web 服务,请查看 geb,它可以很好地作为 spock 的伴侣。Geb 在 Geb 集成之书中有记载,网络上的测试显然涉及更多的活动部件,所以你从模拟服务器端开始是对的。

最新更新