Spock – Llamar a Groovy al mismo cliente varias veces y verificar el resultado.
Estoy tratando de probar la lógica del limitador de velocidad, debería resultar en demasiadas solicitudes en el sexto intento.
Quiero eliminar la repetición de llamar al servicio 5 veces y asegurar que devuelva un estado 200 en los primeros 5 intentos, pero no tengo suerte, hay una excepción.
Groovyc: Las condiciones de excepción solo están permitidas en bloques ‘then’
def "POST hacia el servicio se limita correctamente"() {
IntStream.range(1, 6).forEach({
when:
def result = client.post().uri("/test").exchange()
then:
noExceptionThrown()
result != null
result.expectStatus().isOk()
})
when:
def result6 = client.post().uri("/test").exchange()
then:
noExceptionThrown()
result6 != null
result6.expectStatus().is4xxClientError()
}
davy.ai
Solución
Para evitar la repetición, podemos utilizar la anotación
@Unroll
del framework Spock y especificar el número de iteraciones que queremos ejecutar la prueba.Aquí hay un caso de prueba actualizado que utiliza
@Unroll
:Con esta configuración, podemos ejecutar el mismo caso de prueba 6 veces, con
trialNumber
que varía de 1 a 6. Dentro del caso de prueba, realizamos una solicitud POST en el cliente y luego validamos el código de estado de respuesta.Para las primeras 5 pruebas, esperamos que el código de estado sea
200
. En la sexta prueba, esperamos que se devuelva un código de estado4xx
, lo que indica que se ha superado el límite de velocidad.Ya no es necesario utilizar
IntStream.range()
para iterar manualmente a través de las pruebas, ya que la anotación@Unroll
de Spock se encarga de esto por nosotros.