因此,在仔细检查了stdlibunittest
和鼻子的加载器和选择器源代码之后,事实证明鼻子重写unittest.TestLoader.getTestCaseNames
将使用其自己的选择器(带有插件点)。
现在,鼻子的选择器将寻找一种可能的方法method.__name__
来匹配某些正则表达式,黑白列表以及插件的决策。
在我的情况下,动态生成的函数具有testable.__name__ == '<lambda>'
,不匹配鼻子的选择器条件。
修理,
# inject methods: test{testname}_v4,6(self)
for suffix, arg in (('_false', False), ('_true', True)):
testable_name = 'test{0}{1}'.format(testname, suffix)
testable = lambda self, arg=arg: meth(self, arg)
testable.__name__ = testable_name # XXX: the fix
attrs[testable_name] = testable
当然可以:
(sand@R_153_2419@-2.7)bash-3.2$ nosetests -vv
test_normal (test_testgen.TestCase) ... ok
test_that_false (test_testgen.TestCase) ... ok
test_that_true (test_testgen.TestCase) ... ok
test_this_false (test_testgen.TestCase) ... ok
test_this_true (test_testgen.TestCase) ... ok
----------------------------------------------------------------------
Ran 5 tests in 0.005s
OK