Я написал небольшую функцию, которая динамически определяет классы unittest.TestCase (тривиальная версия ниже).
Когда я переместил его из того же исходного файла в его собственный модуль, я не могу понять, как получить unittest для обнаружения новых классов. Вызов unittest.main () из любого файла не выполняет никаких тестов.
factory.py
:
import unittest
_testnum = 0
def test_factory(a, b):
global _testnum
testname = 'dyntest' + str(_testnum)
globals()[testname] = type(testname, (unittest.TestCase,), {'testme': lambda self: self.assertEqual(a, b)})
_testnum += 1
def finish():
unittest.main()
someotherfile.py
:
from factory import test_factory, finish
test_factory(1, 1)
test_factory(1, 2)
if __name__ == '__main__':
finish()
Выход:
----------------------------------------------------------------------
Ran 0 tests in 0.000s
OK
Так что он не выполняет никаких тестов.
Обратите внимание, что хранение всего этого в одном файле работает должным образом:
import unittest
_testnum = 0
def test_factory(a, b):
global _testnum
testname = 'dyntest' + str(_testnum)
globals()[testname] = type(testname, (unittest.TestCase,), {'testme': lambda self: self.assertEqual(a, b)})
_testnum += 1
test_factory(1, 1)
test_factory(1, 2)
if __name__ == '__main__':
unittest.main()
Выход (как и ожидалось):
.F
======================================================================
FAIL: testme (__main__.dyntest1)
----------------------------------------------------------------------
Traceback (most recent call last):
File "partb.py", line 11, in <lambda>
globals()[testname] = type(testname, (unittest.TestCase,), {'testme': lambda self: self.assertEqual(a, b)})
AssertionError: 1 != 2
----------------------------------------------------------------------
Ran 2 tests in 0.008s
FAILED (failures=1)
Как я использую свою функцию test_factory (), чтобы я мог выполнять все объекты TestCase, которые она определяет, из отдельного исходного файла?