私はunittest.TestCaseクラスを動的に定義する小さな関数を書いています(下の簡単なバージョン)。モジュールからunittest.main()を実行していますか?
同じソースファイルから自分のモジュールに移動したときに、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()
出力を:
私は実行することができるように、私のtest_factory()関数を使用する方法.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)
それはそれが別のソースファイルから定義するすべてのTestCaseオブジェクトですか?
-1:ドキュメントへの参照。 –