La fonction doctest.testmod ()
du module doctest
décrit le test dans la docstring et l'exécute en mode détaillé pour exécuter le test.
sample.py
def twice(n):
"""Une fonction qui double l'argument et renvoie
>>> twice(8)
16
>>> twice(1850923)
"""
return n * 2
'''TEST
twice(8)
#Résultat d'exécution
#16
twice(1850923)
#Résultat d'exécution
#3701846
'''#← Triple citations ici'TEST'En le tirant jusqu'à l'endroit où il est écrit, deux fois(8), twice(1850923)Courir
Si vous augmentez le triple guillemet sous TEST
à TEST
, le commentaire multiligne de type docstring sera supprimé, et une fois exécuté, la fonction double
sera exécutée et testée.
Le TEST
est en dessous de la fonction, donc ça a l'air mauvais.
Je veux le mettre ensemble dans un docstring si possible.
Cependant, si vous utilisez le module doctest, vous pouvez l'écrire dans la docstring, et vous pouvez faire une dextérité qui ne s'exécute pas lorsqu'elle est exécutée à partir d'autres modules.
doctest_sample.py
def twice(n):
"""Une fonction qui double l'argument et renvoie
>>> twice(8)
16
>>> twice(1850923)
3701846
"""
return n * 2
print('name?>>', __name__)
if __name__ == "__main__":
doctest.testmod()
print('EOF')
%run doctest_sample -v
%run doctest_use.py -v
Importez simplement le contenu de doctest_use.py.py
import doctest_sample
```
Lors de l'exécution d'un fichier python sur ipython, exécutez-le avec '% run doctest.testmod ()
, exécutez-le en mode verbeux -v
.
Lors de l'exécution sur sublimetext, construisez avec ctrl + b
.
L'exécution du mode verbeux n'est pas incluse par défaut (qu'elle soit fausse ou vraie ou non vérifiée), créez donc un système de construction et enregistrez-le dans le répertoire utilisateur
Sélectionnez Python_Verbose
créé à partir de Menu> Outils> Système Buile et ctrl + b
Python_Verbose.sublime-build
{
"cmd": ["python", "$file", "-v"],
"file_regex": "^[ ]*File \"(...*?)\", line ([0-9]*)",
"selector": "source.python"
}
1 Ligne de commande et environnement (http://docs.python.jp/3.3/using/cmdline.html) 1.1 Ligne de commande 1.1.3 Autres options
-u¶ (original)
Force the binary layer of the stdout and stderr streams (which is available as their buffer attribute) to be unbuffered. The text I/O layer will still be line-buffered if writing to the console, or block-buffered if redirected to a non-interactive file.
Voir aussi PYTHONUNBUFFERED.
-v
Chaque fois qu'un module est initialisé, il affiche un message vous indiquant où il a été chargé (nom de fichier ou module intégré). S'il est spécifié deux fois (-vv), un message sera affiché pour chaque fichier vérifié lors de la recherche de modules. Il fournit également des informations sur le nettoyage du module à la fin. Voir aussi PYTHONVERBOSE.
% run doctest_sample -v
sur ipython1.1
In [80]: run doctest_sample.py -v
name?>> __main__
Trying:
twice(8)
Expecting:
16
ok
Trying:
twice(1850923)
Expecting:
3701846
ok
1 items had no tests:
__main__
1 items passed all tests:
2 tests in __main__.twice
2 tests in 2 items.
2 passed and 0 failed.
Test passed.
EOF
Puisque l'attribut name est principal, doctest est exécuté
La description de doctest est
Exécutez au format python où vous avez écrit avec >>>
et renvoyez le résultat
S'il n'y a pas d'erreur, lancez ʻok` et passez au test suivant.
1.1
Trying:
twice(8)
Expecting:
16
ok
Afficher le résumé du test
1.1
1 items had no tests:
__main__
1 items passed all tests:
2 tests in __main__.twice
2 tests in 2 items.
2 passed and 0 failed.
Test passed.
body...
% run doctest_use -v
sur ipython1.2
In [81]: run doctest_use.py
Aucune sortie n'est affichée.
2.1
name?>> __main__
Trying:
twice(8)
Expecting:
16
ok
Trying:
twice(1850923)
Expecting:
3701846
ok
1 items had no tests:
__main__
1 items passed all tests:
2 tests in __main__.twice
2 tests in 2 items.
2 passed and 0 failed.
Test passed.
EOF
[Finished in 0.5s]
Identique au résultat 1.1 sauf [Terminé en 0,5 s]
qui apparaît dans le résultat de la construction de sublimetext
2.2
name?>> doctest_sample
EOF
[Finished in 0.4s]
Contrairement au résultat 1.2, l'instruction print semble être exécutée.
docstring.testmod ()
python <filename> -v
)doc.py
import docstring
def hoge():
'''
hoge(args)
'''
if __name__ == "__main__":
doctest.testmod()
Test avec Python Ligne de commande et environnement
Recommended Posts