我想为TestCase派生类的变体创建一个生成器。鼻子:基于TestCase的类的生成器
我想这是什么:
import unittest
def create_class(param):
class Test(unittest.TestCase):
def setUp(self):
pass
def test_fail(self):
assert False
return Test
def test_basic():
for i in range(5):
yield create_class(i)
我得到的是这样的:
======================================================================
ERROR: test_1.test_basic
----------------------------------------------------------------------
Traceback (most recent call last):
File "/usr/lib/python3.3/site-packages/nose/case.py", line 268, in setUp
try_run(self.test, names)
File "/usr/lib/python3.3/site-packages/nose/util.py", line 478, in try_run
return func()
TypeError: setUp() missing 1 required positional argument: 'self'
屈服实例,而不是类(yield create_class(i)()
)给我留下了这个错误:
======================================================================
ERROR: test_1.test_basic
----------------------------------------------------------------------
Traceback (most recent call last):
File "/usr/lib/python3.3/site-packages/nose/case.py", line 198, in runTest
self.test(*self.arg)
File "/usr/lib/python3.3/unittest/case.py", line 492, in __call__
return self.run(*args, **kwds)
File "/usr/lib/python3.3/unittest/case.py", line 423, in run
testMethod = getattr(self, self._testMethodName)
AttributeError: 'Test' object has no attribute 'runTest'
有什么建议吗?
如果我在'Test'中有多个方法,该怎么办?明确地传递这些信息似乎是对DRY原则的一大破坏...... – dom0 2013-03-07 21:33:38
@ dom0我认为你应该仔细阅读关于[测试生成器]的鼻子文档(https://nose.readthedocs.org/en/latest/writing_tests.html#test -generators)。你在混合东西。 'TestCase's *不是*被设计用于这种方式,显然这导致次优代码。 – Bakuriu 2013-03-07 21:38:03