Cómo simular el método objeto de solicitud Grails en una prueba de controlador Spock
Estoy intentando escribir una prueba para una de mis clases de controlador. En este controlador, llamo a request.reader.text
, que puede arrojar MalformedInputException
si el cuerpo contiene caracteres no utf-8.
Este es el caso que estoy intentando probar y simular en mi prueba Spock. Lo más fácil sería si pudiera simular el método getReader()
, pero resulta difícil.
Las cosas que he intentado:
Debería funcionar según esta publicación (pero no lo hace): https://stackoverflow.com/questions/10751728/how-to-mock-httpservletrequest-in-spock
java
GrailsMockHttpServletRequest request = new GrailsMockHttpServletRequest()
request.getReader() & amp; gt; & amp; gt; {
throw new MalformedInputException (1)
}
También intenté esto, según el comentario de @LeonardBrüning (pero parece que no tiene ningún efecto):
GroovySpy (GrailsMockHttpServletRequest, global: true) {
getReader() & amp; gt; & amp; gt; {
throw new MalformedInputException (1)
}
}
Reproducible repo (ejecute ApplicationControllerSpec
): https://github.com/Zorobay/test-app
davy.ai
Para escribir una prueba para la clase controladora que llama a
request.reader.text
y puede lanzar unMalformedInputException
si el cuerpo contiene caracteres no UTF-8, se puede usar el marco Spock para simular el métodogetReader()
de la claseGrailsMockHttpServletRequest
. Sin embargo, parece que no es sencillo simular este método.Puede intentar los siguientes enfoques:
GrailsMockHttpServletRequest
e intente simular el métodogetReader()
:GroovySpy
y cree un espía global enGrailsMockHttpServletRequest
para simular el métodogetReader()
:Puede probar estos enfoques y ver si alguno de ellos funciona para usted. Tenga en cuenta que el código de muestra anterior es solo para fines ilustrativos y es posible que deba ajustarlo para que se ajuste a su caso de uso específico.