Pruebas en Python usando el módulo doctest

Las strings de documentos en Python se utilizan no solo para la descripción de una clase o una función para proporcionar una mejor comprensión del código y el uso, sino también para fines de prueba.

El módulo Doctest encuentra patrones en la string de documentación que parecen comandos de shell interactivos.

La entrada y el resultado esperado se incluyen en la string de documentación, luego el módulo doctest usa esta string de documentación para probar la salida procesada.
Después de analizar la string de documentación, el texto analizado se ejecuta como comandos de shell de Python y el resultado se compara con el resultado esperado obtenido de la string de documentación.

Aquí hay un ejemplo simple:

1. importa testmod desde doctest para probar la función.
2. Definir nuestra función de prueba.
3. Proporcione una string de documentos adecuada que contenga la salida deseada en ciertas entradas.
4. Defina la lógica.
5. Llame a la función testmod con el nombre de la función para probar y establezca Verbose True como argumentos.

Nota: Todos los argumentos son opcionales. El nombre de la función se pasa explícitamente al testmod. Es útil si hay varias funciones.

Implementación

# import testmod for testing our function
from doctest import testmod
  
# define a function to test
def factorial(n):
    '''
    This function calculates recursively and
    returns the factorial of a positive number.
    Define input and expected output:
    >>> factorial(3)
    6
    >>> factorial(5)
    120
    '''
    if n <= 1:
        return 1
    return n * factorial(n - 1)
  
# call the testmod function
if __name__ == '__main__':
    testmod(name ='factorial', verbose = True)

Producción:

Trying:
    factorial(3)
Expecting:
    6
ok
Trying:
    factorial(5)
Expecting:
    120
ok
1 items had no tests:
    factorial
1 items passed all tests:
   2 tests in factorial.factorial
2 tests in 2 items.
2 passed and 0 failed.
Test passed.

Ahora, prueba para fallar. ¿Qué pasa si nuestra lógica es incorrecta?

# import testmod for testing our function
from doctest import testmod
  
# define a function to test
def factorial(n):
    '''
    This function calculates recursively and
    returns the factorial of a positive number.
    Define input and expected output:
    >>> factorial(3)
    6
    >>> factorial(5)
    120
    '''
    if n <= 1:
        return 1
    # wrong logic for factorial
    return factorial(n - 1)
  
# call the testmod function
if __name__ == '__main__':
    testmod(name ='factorial', verbose = True)

Producción:

Trying:
    factorial(3)
Expecting:
    6
**********************************************************************
File "woking_with_csv.py", line 33, in factorial.factorial
Failed example:
    factorial(3)
Expected:
    6
Got:
    1
Trying:
    factorial(5)
Expecting:
    120
**********************************************************************
File "woking_with_csv.py", line 35, in factorial.factorial
Failed example:
    factorial(5)
Expected:
    120
Got:
    1
1 items had no tests:
    factorial
**********************************************************************
1 items had failures:
   2 of   2 in factorial.factorial
2 tests in 2 items.
0 passed and 2 failed.
***Test Failed*** 2 failures.

Nota : si ‘verbose’ se establece en False (predeterminado), la salida se mostrará solo en caso de falla, no en caso de éxito.

Publicación traducida automáticamente

Artículo escrito por mohit_negi y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *