Sto usando la classe Groovy RESTClient per scrivere alcuni test di accettazione (spock) per i servizi Web Java che ho creato.È possibile sostituire la risposta predefinita "HttpResponseException" di RESTClient a> 399 Codici restituiti?
Una frustrazione che ho avuto è in fase di test le risposte ...
200
di Stato sono facili:
when: def result = callServiceWithValidParams()
then: result.status == 200
Ma con 400+
devo per forza o avvolgere in un try-catch
, o il test per il HttpResponseException
che il numero RESTClient
viene generato di default.
when:
callWithInvalidParams()
then:
def e = thrown(Exception)
e.message == 'Bad Request'
Questo è un po 'ok, anche se un po' frustrante ... ma voglio fare meglio.
Idealmente, voglio che i miei test a più assomigliano a questo (potrebbe essere fonte di confusione se non si utilizza 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
}
Nell'esempio precedente, il caso 'Bad Request' fallisce . Invece di restituire un valore, restClient.get()
tiri HttpResponseException
È difficile capire la barriera che si ha di fronte. Puoi pubblicare più informazioni? Che tipo sono i parametri? Cosa succede quando provi a usare il blocco where per definire i parametri? Come si presenta callService()? –
@AlexBlakemore grazie per la risposta. L'esempio alla fine ha lo scopo di illustrare come la mia richiesta originale potrebbe aiutarmi. Ora vedo che è un po 'confuso, perché in realtà non mostro RESTClient. Pensa a 'callService (params)' come un wrapper attorno al client dove i valori di 'params' sono mappe di parametri queryString da inviare al servizio. Tutto ciò non è davvero importante però.Il punto principale è che RESTService restituisce un 'result' per 200 risposte, ma genera un errore per 400, 401, ecc ... quindi non posso testare la risposta in un modo standard nel mio' then: 'block –
Just editted the esempio per renderlo più semplice/chiaro. –