我正在使用Groovy RESTClient类为我正在创作的Java WebServices编写一些(spock)验收测试。
我遇到的一个挫折就是测试答案......
200
状态很简单:
when: def result = callServiceWithValidParams()
then: result.status == 200
但是对于400+
,我不得不用try-catch
包裹,或者测试默认情况下HttpResponseException
投出的RESTClient
。
when:
callWithInvalidParams()
then:
def e = thrown(Exception)
e.message == 'Bad Request'
这有点好,如果有点令人沮丧......但我想做得更好。
理想情况下,我希望我的测试更像这个 (如果你不使用groovy / spock ,可能会令人困惑)
@Unroll
def "should return #statusCode '#status' Response"()
{
when:
def result = restClient.get(path: PATH, query: [param: parameter])
then:
result.status == statusCode
where:
status | statusCode | parameter
'OK' | 200 | validParam
'Bad Request' | 400 | invalidParam
}
在上面的示例中,“错误请求”案例失败。 restClient.get()
不会返回值,而是HttpResponseException
答案 0 :(得分:17)
@JonPeterson想出了我认为更好的解决方案,所以我给了his answer复选标记:
client.handler.failure = client.handler.success
我(之前)提出的解决方案:
restClient.handler.failure = { it }
这是
的简写restClient.handler.failure = { resp -> return resp }
@JimmyLuong 在评论中指出此方法会从响应中删除数据,并提出以下增强功能:
restClient.handler.failure = { resp, data -> resp.setData(data); return resp }
答案 1 :(得分:10)
正如Tomasz在评论中已经链接的那样,这是我在类似问题中的一点{one} answer。
client.handler.failure = client.handler.success
答案 2 :(得分:1)
一种方法是创建一个Groovy方便方法,它包装你的REST调用,捕获异常并将它们转换为状态代码