2 votes

Exécution des tests à partir d'un module

Je tente d'exécuter des tests unitaires en python à partir de ce que je crois être un module. J'ai une structure de répertoire comme

TestSuite.py
UnitTests
  |__init__.py
  |TestConvertStringToNumber.py

Dans testsuite.py j'ai

import unittest

import UnitTests

class TestSuite:
    def __init__(self):
        pass

print "Début des tests"
suite = unittest.TestLoader().loadTestsFromModule(UnitTests)
unittest.TextTestRunner(verbosity=1).run(suite)

Cela semble lancer les tests correctement mais il ne récupère aucun des tests dans TestConvertNumberToString.py. Dans cette classe, j'ai un ensemble de fonctions qui commencent par 'test'.

Que devrais-je faire pour que l'exécution de python TestSuite.py lance réellement tous mes tests dans UnitTests ?

4voto

unutbu Points 222216

Voici du code qui exécutera tous les tests unitaires dans un répertoire :

#!/usr/bin/env python
import unittest
import sys
import os

unit_dir = sys.argv[1] if len(sys.argv) > 1 else '.'
os.chdir(unit_dir)
suite = unittest.TestSuite()
for filename in os.listdir('.'):
    if filename.endswith('.py') and filename.startswith('test_'):
        modname = filename[:-2]
        module = __import__(modname)
        suite.addTest(unittest.TestLoader().loadTestsFromModule(module))

unittest.TextTestRunner(verbosity=2).run(suite)

Si vous l'appelez testsuite.py, alors vous l'exécuteriez de cette manière :

testsuite.py UnitTests

0voto

Glyph Points 17756

En utilisant le lanceur de tests "trial" de Twisted, vous pouvez vous débarrasser de TestSuite.py et simplement faire :

$ trial UnitTests.TestConvertStringToNumber

sur la ligne de commande ; ou, encore mieux, simplement

$ trial UnitTests

pour découvrir et exécuter tous les tests du package.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X