Вопрос

Я пытаюсь запустить несколько модульных тестов в 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

для обнаружения и запуска всех тестов в пакете.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top