Si vous écrivez un test unitaire à l'aide du module unittest de Python dans plusieurs fichiers et que vous souhaitez tous les exécuter, vous pouvez utiliser TestLoader.discovery ().
discover(self, start_dir, pattern='test*.py', top_level_dir=None)
Le modèle par défaut consiste à rechercher les fichiers commençant par test et se terminant par .py sous le répertoire spécifié par start_dir.
Étant donné un répertoire comme argument du script suivant, il exécutera tous les tests qu'il trouve.
runner.py
#!/usr/bin/env python
import sys
from unittest import TestLoader
from unittest import TextTestRunner
def main(path):
loader = TestLoader()
test = loader.discover(path)
runner = TextTestRunner()
runner.run(test)
if __name__ == '__main__':
if len(sys.argv) != 2:
print('usage: %s path' % sys.argv[0])
sys.exit(1)
main(sys.argv[1])
Par exemple
% find tests -type f -name \*.py
tests/hoge/__init__.py
tests/hoge/test_hoge.py
tests/test_fuga.py
On suppose que la structure du répertoire est. La raison pour laquelle __init __. Py
est placé est de le chercher également dans le sous-répertoire. Lorsque j'exécute le script, cela ressemble à ceci:
% ./runner.py tests
FF
======================================================================
FAIL: test_1 (hoge.test_hoge.TestHoge)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/python-study/unittest/tests/hoge/test_hoge.py", line 6, in test_1
self.assertEqual(0, 1)
AssertionError: 0 != 1
======================================================================
FAIL: test_1 (test_fuga.TestFuga)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/python-study/unittest/tests/test_fuga.py", line 6, in test_1
self.assertEqual(0, 1)
AssertionError: 0 != 1
----------------------------------------------------------------------
Ran 2 tests in 0.000s
FAILED (failures=2)
Si vous comptez sur unittest.main, vous pouvez faire de même avec un script shell comme celui-ci:
runner.sh
#!/bin/sh
python -m unittest discover $1
Recommended Posts