Хотя я бы точно не рекомендовал этот подход (и, вероятно, то, что вы пытаетесь сделать), вот простой подход, который, по-видимому, дает примерно то, что вы хотите.
В файле "runner.py" (например, аналогично вашему выше):
импорт глобус
импортный тест
testfiles = glob.glob('subdir/*.py')
for name in testfiles:
execfile(name)
if __name__ == '__main__':
unittest.main()
В файле subdir / file1.py:
class ClassA(unittest.TestCase):
def test01(self):
print self
В файле subdir / file2.py:
class ClassB(unittest.TestCase):
def test01(self):
print self
Вывод при запуске «runner.py»:
C:\svn\stackoverflow>runner
test01 (__main__.ClassA)
.test01 (__main__.ClassB)
.
----------------------------------------------------------------------
Ran 2 tests in 0.004s
OK
Обратите внимание, что это в основном эквивалентно текстовому включению всех тестовых файлов в основной файл, подобно тому, как #include "file.h" работает в C. Как вы можете видеть, среда (пространство имен) для вложенных файлов это файл, в котором вызывается execfile (), поэтому им даже не нужно делать свои собственные вызовы «import unittest». Это должно быть хорошо, если их никогда не нужно запускать автономно, или вы можете просто включить обычный шаблон unittest в каждый файл, если им нужно работать самостоятельно. У вас не может быть дубликатов имен классов во включенных файлах, и вы можете заметить другие трудности.
Я вполне уверен, однако, что вам лучше использовать что-то вроде nose или py.test , которые делают этот вид "тестовой коллекции" намного лучше, чем UnitTest.