Pruebas unitarias en Python
Cita con formato IEEE:
E. Bahit, "Pruebas unitarias", in
Python Aplicado, 4th ed., EBRC Publisher, 2022, pp.
278-284.
Cita con formato APA 7:
Bahit, E. (2022). Pruebas unitarias. In
Python Aplicado (4th ed., pp. 278-284). EBRC Publisher.
Cita en línea:
(Bahit, 2022)
Existen varias bibliotecas para realizar pruebas unitarias en Python. Sin embargo, este libro se centrará en módulos de la biblioteca estándar.
Doctest
En Python existe una forma bastante simple y rudimentaria de realizar pruebas unitarias, cuya curva de aprendizaje es prácticamente imperceptible. Se trata de cadenas de texto insertadas en los comentarios, cuyo contenido se equipara al de una sesión interactiva de la shell de python.
Doctest
localiza dichos fragmentos, los ejecuta y verifica que la salida obtenida sea igual a la mostrada en los comentarios. Solo se requiere ejecutar el script con el argumento-v
para ver los resultados.
El siguiente fragmento de código pertenece a un archivo llamado
prueba.py
:
#!/usr/bin/env python3 """ >>> calcular_edad(1978) 42 >>> calcular_edad("1978") 42 >>> calcular_edad("xxx") Traceback (most recent call last): ... ValueError: invalid literal for int() with base 10: 'xxx' >>> calcular_edad() Traceback (most recent call last): ... TypeError: calcular_edad() missing 1 required positional argument: 'nacimiento' """ def calcular_edad(nacimiento): aaaa = int(nacimiento) edad = 2020 - aaaa return edad if __name__ == "__main__": from doctest import testmod testmod()
Al ejecutar el archivo, solo el argumento -v
hará correr
las pruebas:
eugenia@bella:~/Documentos$ python prueba.py eugenia@bella:~/Documentos$ python3 prueba.py -v Trying: calcular_edad(1978) Expecting: 42 ok Trying: calcular_edad("1978") Expecting: 42 ok Trying: calcular_edad("xxx") Expecting: Traceback (most recent call last): ... ValueError: invalid literal for int() with base 10: 'xxx' ok Trying: calcular_edad() Expecting: Traceback (most recent call last): ... TypeError: calcular_edad() missing 1 required positional argument: 'nacimiento' ok 1 items had no tests: __main__.calcular_edad 1 items passed all tests: 4 tests in __main__ 4 tests in 2 items. 4 passed and 0 failed. Test passed.
La documentación oficial se encuentra disponible en https://docs.python.org/3/library/doctest.html
Unittest
Menos rudimentario, para quienes ya poseen experiencia programando
con pruebas unitarias, existe el módulo unittest
, el cual
tampoco necesita ser instalado ya que desde la versión 2.1 forma parte
de la biblioteca estándar de Python
Métodos Assert
Una lista completa de los métodos assert
se puede
encontrar en la documentación oficial: