Wenn Sie einen Komponententest mit Pythons unittest-Modul in mehreren Dateien schreiben und alle ausführen möchten, können Sie TestLoader.discovery () verwenden.
discover(self, start_dir, pattern='test*.py', top_level_dir=None)
Das Standardmuster besteht darin, Dateien, die mit test beginnen und mit .py enden, in dem von start_dir angegebenen Verzeichnis zu finden.
Wenn ein Verzeichnis als Argument für das folgende Skript angegeben wird, werden alle gefundenen Tests ausgeführt.
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])
Zum Beispiel
% find tests -type f -name \*.py
tests/hoge/__init__.py
tests/hoge/test_hoge.py
tests/test_fuga.py
Es wird angenommen, dass die Verzeichnisstruktur ist. Der Grund, warum "__init __. Py" platziert wird, besteht darin, dass es auch im Unterverzeichnis durchsucht wird. Wenn ich das Skript ausführe, sieht es folgendermaßen aus:
% ./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)
Wenn Sie sich auf unittest.main verlassen, können Sie dasselbe mit einem Shell-Skript wie dem folgenden tun:
runner.sh
#!/bin/sh
python -m unittest discover $1
Recommended Posts