Подтвердить что ты не робот

Могу ли я переопределить ответ RESTClient по умолчанию "HttpResponseException" нa> 399 Коды возврата?

Я использую класс Groovy RESTClient для написания некоторых (спотов) приемочных тестов для Java WebServices. Я был авторинга.

Одно разочарование, которое я испытывал, заключается в тестировании ответов...

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() throws HttpResponseException

4b9b3361

Ответ 1

Поскольку Tomasz уже связан в комментарии, вот мой маленький однострочный ответ из аналогичного вопроса.

client.handler.failure = client.handler.success

Ответ 2

@JonPeterson придумал то, что я считаю лучшим решением, поэтому я дал его ответ галочку:

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 }

Ответ 3

Одним из способов было бы сделать метод удобства Groovy, который обертывает ваши вызовы REST, которые ловит исключения и превращают их в коды состояния