Prueba tu código Python con comentarios



@eduardo_gpg

Número de visitas 958

Tiempo de lectura 3 min

30 Enero 2022

En una entrega anterior hablamos sobre el docstring en Python, el cual nos permite, no solo documentar nuestro código, si no además testearlo. Para ello, si recordamos, basta con definir, dentro del docstring, todos los casos de prueba con los cuales queremos probar nuestra funcionalidad. 😎

Aquí un ejemplo

main.py

def vocales(sentence):
    """Retorna un listado de vocales.

    >>> vocales('Hola mundo')
    ['o', 'a', 'u', 'o']

    >>> vocales('PyWombat')
    ['o', 'a']
    """
    sentence = sentence.lower()
    return [c for c in sentence if c in ['a', 'e', 'i', 'o', 'u']]

Para ejecutar esto, basta con hacer uso del módulo doctest de Python.

python -m doctest main

Si no obtenemos ningún mensaje de salida entonces las pruebas se han ejecutado y pasado de forma correcta.

Esto funciona bastante bien, sin embargo, ¿Qué pasa si no deseamos que el docstring de nuestras funciones, métodos o clases posea todos los casos de prueba, si no que deseamos aislar estos en archivos diferentes? Pues bien, déjame decirte que esto es posible. Y eso es justamente de lo que vamos hablar el día de hoy, de cómo testear nuestro código Python mediante una suite de pruebas en archivos diferentes. Pudiendo así desacoplar funcionalidades de pruebas. 😱

Es un tema realmente interesante, ya que no necesitaremos ningún tipo de librería externa de Python. Con las herramientas que ya posee el lenguaje podremos crear código fácil de leer, fácil de testar y sobre todo, fácil de mantener.

Bien una vez dicho todo esto, pongamos manos a la obra.

Docstring 🐍

Lo primero que debemos hacer será separar los casos de prueba de nuestra funcionalidad.

En mi caso, siguiendo con el ejemplo anterior, dejaré la función de la siguiente manera.

main.py

def vocales(sentence):
    """Retorna un listado de vocales.

    args:
        sentence: string

    return:
        list: string
    """
    sentence = sentence.lower()
    return [c for c in sentence if c in ['a', 'e', 'i', 'o', 'u']]

Enfocándose únicamente en la documentación.

Lo siguiente será crear un archivo .txt donde vamos a colocar, tanto las pruebas, como el código necesario para poder lograr estas.

Por convención recomiendo que el nombre de este archivo posea el prefijo _test.

test_main.txt

>>> from main import vocales

>>> sentence  = 'Hola mundo'
>>> vocales(sentence)
['o', 'a', 'u', 'o']

>>> sentence  = 'PyWombat'
>>> vocales(sentence)
['o', 'a']

Como podemos observar, al la función encontrarse en un archivo diferente será necesario realizar el import.

Dentro del archivo podremos "declarar" variables, hacer uso de ciclos, condicionales, funciones etc... Todo lo que podemos hacer en el shell podremos hacerlo dentro del archivo.

Recordando que para ejecutar una sentencia Python debemos comenzar la línea con triple mayor que (>>>). 🥳

Para poder ejecutar esto basta con utilizar el siguiente comando.

python -m doctest test_main.txt

De igual forma, si el código se ejecuto correctamente no deberíamos visualizar nada en consola. En caso contrarío, un excepción será lanzada.🤯

Si queremos obtener una salida mucho más detallada haremos uso de la bandera -v (verbose).

python -m doctest test_main.txt -v

En mi caso la salida será la siguiente.

Trying:
    from main import vocales
Expecting nothing
ok
Trying:
    sentence  = 'Hola mundo'
Expecting nothing
ok
Trying:
    vocales(sentence)
Expecting:
    ['o', 'a', 'u', 'o']
ok
Trying:
    sentence  = 'PyWombat'
Expecting nothing
ok
Trying:
    vocales(sentence)
Expecting:
    ['o', 'a']
ok
1 items passed all tests:
   5 tests in test_main.txt
5 tests in 1 items.
5 passed and 0 failed.
Test passed.

Podemos visualizar que por cada línea tenemos un Try y un Except.

Bastante cool ¿no lo crees?

De esta forma, mediante un archivo exclusivamente de pruebas, tendremos mucha más libertad al momento de crear nuestros casos de prueba, pudiendo trabajar con variables, ciclos, condiciones, funciones etc... 🦝

Si bien el módulo doctest no puede ser considerado como un framework de pruebas por parte de Python, si es importante destacar todas las bondades que nos ofrece.

Desde mi punto de vista, este conocimiento, en conjunto con el uso del módulo logging, es un plus al momento de aplicar a cualquier vacante Python o al momento de entregar algún proyecto a tus clientes.

Podemos tener un código profesional sin muchos esfuerzos. 🍻


¿El contenido te resulto de ayuda?

Para poder dejar tu opinión es necesario ser un usuario autenticado. Login

Más Tips y Ejercicios 🐍

Adquiere una subscripción PyWombat por tan solo $3 USD. al mes.

Conoce los beneficios de ser usuario premium:
Niveles desbloqueados: Ten accesos a todos los niveles de ejercicios. 🔓
Nuevo límite: Incrementa tu límite de ejercicios por semana. 🚀
Contenido único: Recibe semanalmente recursos exclusivos de Python (Videos, Artículos y Capitulos del libro PyWombat, comienza como desarrollador Python. 🐍