Ecrire le test dans la docstring python

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.

Où j'écrivais

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.

Utilisez le module doctest

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')

Vérifiez le résultat de l'exécution à l'aide des quatre méthodes suivantes

  1. ipython
    1. %run doctest_sample -v
    2. %run doctest_use.py -v
  2. sublimetext
  3. Exécutez doctest_sample.py sur sublimetext
  4. Exécutez doctest_use.py.py sur sublimetext

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 '. Lorsque vous utilisez 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"
}

À propos des options de ligne de commande -u et -v

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.

Résultat 1.1 % run doctest_sample -v sur ipython

1.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...

Résultat 1.2 % run doctest_use -v sur ipython

1.2


In [81]: run doctest_use.py

Aucune sortie n'est affichée.

Résultat 2.1 Construisez doctest_sample.py sur sublimetext

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

Résultat 2.2 Construisez doctest_use.py sur 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.

Résumé

doc.py


import docstring

def hoge():
    '''
    hoge(args)
    '''


if __name__ == "__main__":
    doctest.testmod()

référence

Test avec Python Ligne de commande et environnement

Recommended Posts

Ecrire le test dans la docstring python
Je veux écrire en Python! (2) Écrivons un test
Ecrire un histogramme à l'échelle logarithmique sur l'axe des x en python
Ecrire une dichotomie en Python
Ecrire un test piloté par table en C
Ecrire des algorithmes A * (A-star) en Python
Ecrire le code de test du sélénium en python
Ecrire un graphique à secteurs en Python
Ecrire le plugin vim en Python
Écrire une recherche de priorité en profondeur en Python
Ecrire une courte définition de propriété en Python
Exécuter l'interpréteur Python dans le script
Ecrire un programme de chiffrement Caesar en Python
Ecrire une méthode de cupidité simple en Python
Ecrire un plugin Vim simple en Python 3
Ecrire Python dans MySQL
Créez un environnement de test Vim + Python en 1 minute
[Python] Récupérez les fichiers dans le dossier avec Python
Récupérer l'appelant d'une fonction en Python
Copiez la liste en Python
Configurez un serveur SMTP de test en Python.
Conseils pour rédiger un aplatissement concis en python
Sortie sous la forme d'un tableau python
[Python] Trouvez la matrice de translocation en notation d'inclusion
Créer en Python sans fichier image factice dans Django et tester le téléchargement de l'image
Vérifiez si la chaîne est un nombre en python
Prendre une capture d'écran en Python
Informations de base Écrire le problème d'algorithme de l'automne 2018 en Python
N'hésitez pas à rédiger un test avec nez (dans le cas de + gevent)
Créer une fonction en Python
Créer un dictionnaire en Python
Ecrire un programme de dynamique moléculaire super simple en python
Trouver des erreurs en Python
Écrire une distribution bêta en Python
Algorithme en Python (jugement premier)
Ecrire python dans Rstudio (réticulé)
Ecrire des caractères dans l'illustration de la carte avec OpenCV python
Créer un bookmarklet en Python
[Python] Comment écrire une docstring conforme à PEP8
Je veux écrire en Python! (3) Utiliser des simulacres
Écrire du code dans UnitTest une application Web Python
Dessinez un cœur en Python
Un mémorandum sur la mise en œuvre des recommandations en Python
Définir le test python dans jenkins
Que signifie le dernier () dans une fonction en Python?
Comment tester unitaire une fonction contenant l'heure actuelle à l'aide de Freezegun en Python
Découvrez la largeur apparente d'une chaîne en python
Créer une portée locale en Python sans polluer l'espace de noms
Comment utiliser la méthode __call__ dans la classe Python
Changer la destination de sortie standard en un fichier en Python
Ecrire un programme python pour trouver la distance d'édition [python] [distance Levenshtein]
Obtenez le nombre d'éléments spécifiques dans la liste python
[Note] Importation de fichiers dans le répertoire parent en Python
J'ai essayé de programmer le test du chi carré en Python et Java.
Comment obtenir la dernière (dernière) valeur d'une liste en Python
Trouver les valeurs propres d'une vraie matrice symétrique en Python
Probablement dans un serpent Nishiki (Titre original: Peut-être en Python)