es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para escribir una prueba para la clase controladora que llama a request.reader.text y puede lanzar un MalformedInputException si el cuerpo contiene caracteres no UTF-8, se puede usar el marco Spock para simular el método getReader() de la clase GrailsMockHttpServletRequest. Sin embargo, parece que no es sencillo simular este método.

    Puede intentar los siguientes enfoques:

    1. Use GrailsMockHttpServletRequest e intente simular el método getReader():
    def "probar el método controlador que llama a request.reader.text"() {
        given:
        def request = new GrailsMockHttpServletRequest()
        request.reader = GroovySpy(StringReader) {
            getText() >> { throw new MalformedInputException(1) }
        }
        def controller = new YourController(request: request)
    
        expect:
        thrown(MalformedInputException)
        when:
        controller.yourMethod()
    }
    
    1. Use GroovySpy y cree un espía global en GrailsMockHttpServletRequest para simular el método getReader():
    def "probar el método controlador que llama a request.reader.text"() {
        given:
        GroovySpy(GrailsMockHttpServletRequest, global: true) {
            getReader() >> { throw new MalformedInputException(1) }
        }
        def request = new GrailsMockHttpServletRequest()
        def controller = new YourController(request: request)
    
        expect:
        thrown(MalformedInputException)
        when:
        controller.yourMethod()
    }
    

    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.

Comments are closed.