Lors de l'écriture de tests avec python unittest, utilisez doCleanups pour les setUps qui peuvent échouer

Lors de l'écriture d'un test à l'aide du module unittest, vous pouvez écrire un fixture pour préparer le test. Bien que tearDown reçoive et gère les exceptions dans la fonction de test. Les exceptions pendant la configuration seront contournées. Utilisez doCleanups pour les setUps qui peuvent échouer.

À propos du montage de test

Lors de l'écriture d'un test à l'aide du module unittest, vous pouvez écrire un fixture pour préparer le test. Par exemple, setUp / tearDown correspond à cela.

Écrivez comme suit.

class Tests(unittest.TestCase):
    def setUp(self):
        print("setUp")

    def tearDown(self):
        print("tearDown")

    def test_it(self):
        print("before execute")
        _callFUT()
        print("after execute")

A ce moment, il est exécuté dans l'ordre suivant.

  1. setUp
  2. test_it
  3. tearDown

tearDown est également appelé lorsqu'une exception se produit dans la fonction de test en 2.


class Tests2(unittest.TestCase):
    def setUp(self):
        print("setUp")

    def tearDown(self):
        print("tearDown")

    def doCleanups(self):
        print("cleanup")

    def test_it(self):
        print("before execute")
        raise Exception
        print("after execute")

L'ordre d'exécution est le même.

  1. setUp
  2. test_it
  3. tearDown

Si setUp lève une exception

Bien sûr, le code écrit dans setUp de test est également du code python, il y en a donc qui peuvent déclencher des exceptions. Dans un tel cas, il est dangereux de penser que tearDown garantit le nettoyage après exécution. En fait, tearDown n'est pas au courant des exceptions dans setUp.

class Tests3(unittest.TestCase):
    def setUp(self):
        print("setUp")
        raise Exception("setup")

    def tearDown(self):
        print("tearDown")

    def test_it(self):
        print("before execute")
        raise Exception("execute")
        print("after execute")

Seuls les suivants sont appelés

  1. setUp

tearDown n'est pas appelé. À ce stade, si vous souhaitez ajouter du post-traitement, utilisez doCleanups. doCleanups est appelé inconditionnellement indépendamment des exceptions à setUp et tearDown.

class Tests4(unittest.TestCase):
    def setUp(self):
        print("setUp")
        raise Exception("setup")

    def tearDown(self):
        print("tearDown")

    def doCleanups(self):
        print("cleanup")

    def test_it(self):
        print("before execute")
        print("after execute")

L'ordre d'exécution dans ce cas est

  1. setUp
  2. doCleanups

Sera.

Recommended Posts

Lors de l'écriture de tests avec python unittest, utilisez doCleanups pour les setUps qui peuvent échouer
Structure de répertoire lors de l'écriture de tests avec unittest standard Python 3
Utilisez une macro qui s'exécute lors de l'enregistrement de python avec vscode
Utiliser DeepL avec python (pour la traduction d'articles)
Optimisation mathématique pour un travail gratuit avec Python + PuLP
Jusqu'à ce que vous puissiez utiliser opencv avec python
Utilisez Logger avec Python pour le moment
Envelopper C avec Cython pour une utilisation à partir de Python
Envelopper C ++ avec Cython pour une utilisation à partir de Python
[Python] Je souhaite utiliser uniquement l'index lors de la mise en boucle d'une liste avec une instruction for
Web scraping pour les débutants en Python (1) Version améliorée
Manipulation de chaînes avec python et pandas que j'utilise souvent
Notez qu'écrire comme ça avec ruby c'est écrire comme ça avec python
Utiliser Python installé par pyenv pour l'environnement d'exécution PL / Python
Utilisez Cursur qui se ferme automatiquement avec sqlite3 en Python
Notes sur les connaissances Python utilisables avec AtCoder
[Python] Utiliser JSON avec Python
Utiliser mecab avec Python 3
Utiliser DynamoDB avec Python
Utilisez Python 3.8 avec Anaconda
Utiliser python avec docker
Pourquoi puis-je utiliser le module en important avec python?
[python] Remarques lors de la tentative d'utilisation de numpy avec Cython
Scripts pouvant être utilisés lors de l'utilisation de Bottle en Python
On m'a dit que je ne pouvais pas trouver XML_SetHashSalt lorsque j'ai essayé d'utiliser pip avec python.
Comprendre les probabilités et les statistiques qui peuvent être utilisées pour la gestion des progrès avec un programme python