2009-10-16 19 views
16

Estoy escribiendo pruebas unitarias para una parte de una aplicación que se ejecuta como un servidor HTTP. El enfoque que he estado tratando de hacer es importar el módulo que contiene el servidor HTTP, iniciarlo. Luego, las pruebas unitarias usarán urllib2 para conectarse, enviar datos y verificar la respuesta.Python - Pruebas torcidas y unitarias

Nuestro servidor HTTP utiliza Twisted. Un problema aquí es que simplemente no estoy familiarizado con Twisted :)

Ahora, instanciamos nuestro servidor HTTP y lo iniciamos en el método setUp() y luego lo detengo en el método tearDown().

El problema es que a Twisted no parece gustarle esto, y solo se le ejecutará una prueba unitaria. Después de la primera, el reactor ya no comenzará.

He buscado, buscado y buscado, y parece que no puedo encontrar una respuesta que tenga sentido.

¿Estoy tomando el enfoque equivocado por completo, o simplemente me falta algo obvio?

Respuesta

17

Aquí hay algo de información: Writing tests for Twisted code using Trial

Usted también debe mirar a la -help del comando de prueba. ¡Hay muchas cosas buenas en prueba! Pero no siempre es fácil hacer pruebas en una aplicación asíncrona. ¡Buena suerte!

7

Creo que para las pruebas unitarias dentro de Twisted se supone que debes usar TwistedTrial (es un componente central, es decir, viene con el tarball torcido en el directorio twisted/trial). Sin embargo, como dice la URL que he señalado, el documento es principalmente al echar un vistazo a la fuente (incluidas las fuentes de varios proyectos Twisted, ya que también se prueban con Trial).

3

Hay un known bug con Twisted (que probablemente no se arregle) donde el reinicio del reactor provoca un bloqueo.

Es por eso que las pruebas de su unidad no funcionan.

Además de usar Trial, es posible que desee considerar sistemas de prueba independientes que se comuniquen con su servidor HTTP como lo hará un cliente.

  • Webdriver - una API para administrar una sesión del navegador en su sitio.
  • TestGen4Web - Complemento de Firefox que registra las interacciones con el sitio y puede reproducir.
4

Como han mencionado otros, debe utilizar Trial para pruebas unitarias en Twisted.

También debe realizar pruebas unitarias desde abajo hacia arriba, eso es lo que implica la "unidad" en las pruebas unitarias. Pruebe sus datos y lógica antes de probar su interfaz. Para una interfaz HTTP, debe llamar a processGET, processPOST, etc. con una solicitud simulada, pero solo debe hacer esto una vez que haya probado a qué llaman estos métodos. Cada prueba debe suponer que las unidades probadas en otro lugar están funcionando según lo diseñado.

Si habla HTTP, o si necesita un servidor en ejecución u otro estado, es probable que esté realizando pruebas de nivel superior, como pruebas funcionales o de integración. Esto no es malo, pero es posible que desee reformular su pregunta.

+0

Sabes que creo que tienes razón.Honestamente, todo lo que necesito hacer para hacer pruebas unitarias de nivel inferior sería falsificar el objeto "solicitud" (algunas funciones lo usan bastante). – Dave