Python: Cómo hacer pruebas 1: doctest
Voy a redactar distintas maneras de hacer pruebas en Python. En este sentido, veremos diferentes estilos, desde el más sencillo al más complejo; desde las pruebas unitarias hasta las pruebas de sistema.
Estoy convencido de que me voy a dejar mil historias en el tintero… os ruego un poco de paciencia y de ayuda :D
En esta primera entrega, veremos cómo probar utilizando los desconocidos doctest.
Función de ejemplo
Vamos a practicar con la función que obtiene el factorial de un número, función que queremos probar. Es decir, que tenemos la función:
|
|
Y queremos probar si funciona.
Pruebas en la documentación
Por esta razón vamos a añadirle el paquete doctest y la línea de ejecución adecuada:
|
|
Finalmente, será necesario añadir un comentario a la función, de la misma manera que lo veríamos en el intérprete en línea:
|
|
Ejecutando, que es gerundio
Vamos a ver lo que ocurre cuando lo ejecutamos. Por favor, hacedlo.
¿Nada? Eso es porque todo ha ido bien. Pero claro, no podemos fiarnos… Así que ejecutaremos de nuevo pero con el parámetro -v
:
|
|
Madre mía, qué cosa más sencilla.
Separación de tests y pruebas
Usar este tipo de pruebas puede resultar un problema, ya que ensucia muchísimo el código. La solución está en sacarlo a un archivo diferente. De esta manera, el código se quedará más limpio (ojo a la función doctest.testfile
):
|
|
Separando los tests a un fichero externo, que en este caso se tiene que llamar example2.txt
:
|
|
Lo más divertido de este método es que podemos dejar perfectamente documentado nuestro código y que estos comentarios se van a probar. Es decir: si nuestro código cambia, invalidará la documentación.
El próximo día… UnitTest/UnitTest2
Para saber más…
Aunque pensaba utilizar la función del factorial, resulta que la misma idea la tuvieron ya la gente de Python al hacer el propio manual de doctest. Aún así os contarán muchas cosas que yo me he dejado en el tintero, como la captura de excepciones, etc.
También podéis preguntar en este foro y así responderemos a las preguntas entre todos