Ich schrieb eine kleine Funktion, die unittest.TestCase-Klassen (trivial Version unten) dynamisch definiert.Running unittest.main() von einem Modul?
Wenn ich es aus der gleichen Quelldatei in ein eigenes Modul verschoben habe, kann ich nicht herausfinden, wie man unittest erhält, um die neuen Klassen zu entdecken. Der Aufruf von unittest.main() aus einer der beiden Dateien führt keine Tests aus.
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()
Ausgang:
----------------------------------------------------------------------
Ran 0 tests in 0.000s
OK
es ist also keine Tests durchführen.
Beachten Sie, dass sie alle in der gleichen Datei zu halten wie erwartet funktioniert:
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()
Ausgang (wie erwartet):
.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)
Wie ich meine test_factory() Funktion verwenden, so dass ich ausführen kann alle TestCase-Objekte, die es aus einer separaten Quelldatei definiert?
-1: Kein Hinweis auf die Dokumentation. –