【发布时间】:2009-05-15 15:57:58
【问题描述】:
我写了一个动态定义 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 对象?
【问题讨论】:
标签: python unit-testing