Запуск тестов из модуля
-
21-09-2019 - |
Вопрос
Я пытаюсь запустить несколько модульных тестов в Python из того, что я считаю модулем.У меня есть структура каталогов вроде
TestSuite.py
UnitTests
|__init__.py
|TestConvertStringToNumber.py
В testsuite.py у меня есть
import unittest
import UnitTests
class TestSuite:
def __init__(self):
pass
print "Starting testting"
suite = unittest.TestLoader().loadTestsFromModule(UnitTests)
unittest.TextTestRunner(verbosity=1).run(suite)
Кажется, что тестирование начинается нормально, но он не запускает ни одного теста в TestConvertNumberToString.py.В этом классе у меня есть набор функций, которые начинаются с «теста».
Что мне следует сделать, чтобы запуск python TestSuite.py фактически запускал все мои тесты в UnitTests?
Решение
Вот код, который запустит все модульные тесты в каталоге:
#!/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)
Если вы назовете его testsuite.py, вы запустите его так:
testsuite.py UnitTests
Другие советы
Используя «пробную» программу запуска тестов Twisted, вы можете избавиться от TestSuite.py и просто сделать:
$ trial UnitTests.TestConvertStringToNumber
в командной строке;или, еще лучше, просто
$ trial UnitTests
для обнаружения и запуска всех тестов в пакете.