Spock test - RESTClient: HttpResponseException: не найдено

63
10

Я хочу написать тест для запроса GET, когда API возвращает 404.

Мой тест:

   def "Should return 404 - object deleted before"() {
setup:
def advertisementEndpoint = new RESTClient( 'http://localhost:8080/' )
when:
def resp = advertisementEndpoint.get(
path: 'api/advertisement/1',
contentType: groovyx.net.http.ContentType.JSON
)
then:
resp.status == 404
}

Моя ошибка:

14: 24: 59.294 [main] DEBUG oahimpl.client.DefaultHttpClient - соединение можно поддерживать неограниченно 14: 24: 59.305 [главная] DEBUG groovyx.net.http.RESTClient - код ответа: 404; найденный обработчик: org.codehaus.groovy.runtime.MethodClosure@312aa7c 14: 24: 59.306 [main] DEBUG groovyx.net.http.RESTClient - Анализ ответа как: application/json 14: 24: 59.443 [main] DEBUG org.apache.http.wire - << "ba [\ r] [\n]" 14: 24: 59.444 [main] DEBUG org.apache.http.wire - << "{" timestamp ": 1436358299234," status ": 404, "error": "Not Found", "exception": "com.pgssoft.exparo.web.ResourceNotFoundException", "message": "Нет сообщений", "путь": "/api/advertising/1"} " 14: 24: 59.445 [main] DEBUG org.apache.http.wire - << "[\ r] [\n]" 14: 24: 59.445 [main] DEBUG org.apache.http.wire - << "0 [\ r] [\n] "14: 24: 59.446 [main] DEBUG org.apache.http.wire - <<" [\ r] [\n] "14: 24: 59.446 [main] DEBUG oahicBasicClientConnectionManager - освобождение соединение org.apache.http.impl.conn.ManagedClientConnectionImpl@2ab4bc72 14: 24: 59.446 [main] DEBUG oahicBasicClientConnectionManager - соединение можно поддерживать неограниченно 14: 24: 59.449 [main] DEBUG groovyx.net.http.RESTClient - проанализированные данные к примеру: class groov y.json.internal.LazyMap

groovyx.net.http.HttpResponseException: Не найдено на groovyx.net.http.RESTClient.defaultFailureHandler(RESTClient.java:263) в groovy.lang.Closure.call(Closure.java:423) в groovyx.net.http.HTTPBuilder $ 1.handleResponse(HTTPBuilder.java:503) в org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:218) в org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java: 160) в groovyx.net.http.HTTPBuilder.doRequest(HTTPBuilder.java:515) в groovyx.net.http.RESTClient.get(RESTClient.java:119) в AdvertisingTest.Should вернуть 404 - удалить объект до (AdvertisementTest.groovy: 79)

спросил(а) 2015-07-08T15:37:00+03:00 5 лет, 9 месяцев назад
1
Решение
62

Вам нужен обработчик отказа для базового HTTPBuilder. Из HTTPBuilder javadoc:

Вы также можете установить обработчик ответа по умолчанию, вызываемый для любого кода состояния 399, который не соответствует определенному обработчику. Установка значения вне закрытия запроса означает, что он будет применяться ко всем будущим запросам с этим экземпляром HTTPBuilder:

http.handler.failure = { resp → println "Unexpected failure: ${resp.statusLine}" }

Следовательно:

@Grapes(
@Grab(group='org.codehaus.groovy.modules.http-builder', module='http-builder', version='0.7.1')
)

import groovyx.net.*
import groovyx.net.http.*

def restClient = new RESTClient('http://localhost/wrong')
restClient.handler.failure = { resp -> resp.status }
def response = restClient.get([:])
assert response == 404

ответил(а) 2015-07-08T18:07:00+03:00 5 лет, 9 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема