Python inclúe un módulo doctest estándar que proba o contido dunha docstring, facilitando a escritura de exemplos de entrada e saída na docstring e facilitando a comprensión da documentación.
A seguinte información ofrécese aquí.
- Un exemplo sinxelo de proba con doctest
- Se non hai erro
- Se hai un erro
- Controle os resultados de saída mediante opcións e argumentos
-v
Opciónverbose
argumento (por exemplo, función, programa, programa)
- Execute o módulo doctest desde a liña de comandos
- Redacción de probas nun ficheiro de texto externo
- Como escribir un ficheiro de texto
- Chamado desde o ficheiro py
- Executar directamente un ficheiro de texto
Un exemplo sinxelo de proba con doctest
Unha docstring é unha cadea encerrada nun dos seguintes: (1) o nome da función que se vai probar, (2) o nome da función que se vai probar e (3) o valor de saída esperado no modo interactivo de Python.
"""
''
Se non hai erro
Asegúrese de que o código é correcto na función e no contido da cadea de documentos.
def add(a, b):
'''
>>> add(1, 2)
3
>>> add(5, 10)
15
'''
return a + b
if __name__ == '__main__':
import doctest
doctest.testmod()
Executar este ficheiro.
$ python3 doctest_example.py
Se non hai erros, non se sairá nada.
if __name__ == '__main__'
Isto significa “executar o procesamento posterior só cando se executa o ficheiro de script correspondente desde a liña de comandos.
Se hai un erro
Se crea e executa o seguinte código incorrecto, aparecerá un erro.
def add(a, b):
'''
>>> add(1, 2)
3
>>> add(5, 10)
10
'''
return a * b
if __name__ == '__main__':
import doctest
doctest.testmod()
$ python3 doctest_example_error.py
**********************************************************************
File "doctest_example_error.py", line 3, in __main__.add
Failed example:
add(1, 2)
Expected:
3
Got:
2
**********************************************************************
File "doctest_example_error.py", line 5, in __main__.add
Failed example:
add(5, 10)
Expected:
10
Got:
50
**********************************************************************
1 items had failures:
2 of 2 in __main__.add
***Test Failed*** 2 failures.
Móstrase do seguinte xeito.
Valores de saída esperados escritos en doctest. | Expected |
Valor de saída real | Got |
Controle os resultados de saída mediante opcións e argumentos
-vOpción
Se quere que se mostren os resultados de saída aínda que non haxa erros, execute o comando coa opción -v na liña de comandos.
$ python3 doctest_example.py -v
Trying:
add(1, 2)
Expecting:
3
ok
Trying:
add(5, 10)
Expecting:
15
ok
1 items had no tests:
__main__
1 items passed all tests:
2 tests in __main__.add
2 tests in 2 items.
2 passed and 0 failed.
Test passed.
verboseargumento (por exemplo, función, programa, programa)
Se queres mostrar sempre os resultados de saída, especifique o argumento verbose=True en doctest.testmod() no ficheiro py.
if __name__ == '__main__':
import doctest
doctest.testmod(verbose=True)
Os resultados de saída sempre se mostrarán sen a opción -v no tempo de execución.
$ python3 doctest_example_verbose.py
Trying:
add(1, 2)
Expecting:
3
ok
Trying:
add(5, 10)
Expecting:
15
ok
1 items had no tests:
__main__
1 items passed all tests:
2 tests in __main__.add
2 tests in 2 items.
2 passed and 0 failed.
Test passed.
Execute o módulo doctest desde a liña de comandos
if __name__ == '__main__'
Se queres facer outra cousa nel, podes executar o módulo doctest directamente desde a liña de comandos sen chamar a doctest.testmod() no ficheiro py.
Por exemplo, nos seguintes casos
def add(a, b):
'''
>>> add(1, 2)
3
>>> add(5, 10)
15
'''
return a + b
if __name__ == '__main__':
import sys
result = add(int(sys.argv[1]), int(sys.argv[2]))
print(result)
Pode recibir argumentos da liña de comandos e executar o proceso como é habitual.
$ python3 doctest_example_without_import.py 3 4
7
Se executa doctest como un script coa opción -m, a proba executarase contra a función na que se escribe doctest. Se queres mostrar os resultados de saída, engade -v como antes.
$ python3 -m doctest doctest_example_without_import.py
$ python3 -m doctest -v doctest_example_without_import.py
Trying:
add(1, 2)
Expecting:
3
ok
Trying:
add(5, 10)
Expecting:
15
ok
1 items had no tests:
doctest_example_without_import
1 items passed all tests:
2 tests in doctest_example_without_import.add
2 tests in 2 items.
2 passed and 0 failed.
Test passed.
Redacción de probas nun ficheiro de texto externo
Tamén pode escribir o código de proba nun ficheiro de texto externo en lugar de na cadea de documentos.
Como escribir un ficheiro de texto
Escriba en formato de modo interactivo Python, como se describe en docstring. É necesario importar as funcións a utilizar.
Se queres poñer o ficheiro de texto no mesmo directorio que o ficheiro .py a probar, só tes que importalo como segue.
>>> from doctest_example import add
>>> add(1, 2)
3
>>> add(5, 10)
15
Chamado desde o ficheiro py
Chame a doctest.testfile() noutro ficheiro .py para probalo.
Especifique a ruta do ficheiro de texto onde se escribe o código de proba como argumento de doctest.testfile().
import doctest
doctest.testfile('doctest_text.txt')
Executar este ficheiro py.
$ python3 doctest_example_testfile.py -v
Trying:
from doctest_example import add
Expecting nothing
ok
Trying:
add(1, 2)
Expecting:
3
ok
Trying:
add(5, 10)
Expecting:
15
ok
1 items passed all tests:
3 tests in doctest_text.txt
3 tests in 1 items.
3 passed and 0 failed.
Test passed.
Executar directamente un ficheiro de texto
Aínda que non teña o ficheiro py, pode ler o ficheiro de texto directamente desde a liña de comandos e executar as probas.
Executa o comando Python coa opción -m para executar doctest como un script. Podes especificar a ruta do ficheiro de texto como argumento da liña de comandos.
$ python3 -m doctest -v doctest_text.txt
Trying:
from doctest_example import add
Expecting nothing
ok
Trying:
add(1, 2)
Expecting:
3
ok
Trying:
add(5, 10)
Expecting:
15
ok
1 items passed all tests:
3 tests in doctest_text.txt
3 tests in 1 items.
3 passed and 0 failed.
Test passed.