当在测试设置中有重大的重叠时,它可以让事情继续使用继承。但是,这会造成一些问题与测试执行的不必要的重复:为什么派生类中的测试重新运行父类测试?
from unittest import TestCase
class TestPotato(TestCase):
def test_in_parent(self):
print 'in parent'
class TestSpud(TestPotato):
def test_in_child(self):
print 'in child'
测试该模块运行test_in_parent
两次。
$ python -m unittest example
in parent
.in child
.in parent
.
----------------------------------------------------------------------
Ran 3 tests in 0.000s
OK
为什么?这是设计吗?通过以某种方式配置测试运行器可以禁用它吗?
我可以通过将安装程序移动到一个未发现的类,然后使用多个继承来解决此问题,但它似乎有点hacky和不必要的。在其他选手如鼻(nosetests -s example.py
)和pytest(py.test example.py
)
因为他们继承父母的测试方法,所以当'unittest'看起来通过他们的'dir'(或'__dict__'或任何它)对于开始'test_'的方法,它也找到了继承的方法。我不认为解决这个问题需要多重继承;抽象出什么都需要第三个不可检测的类,没有'test_'方法,并让它们都继承它。 – jonrsharpe
内省具有包含由test前缀的方法的父类的子类将显示具有这些方法的子类。这是python OOP。我不认为将设置方法移动到mixin或者作为单独的基类看起来好像很乱,也可能是DRYer – dm03514
对于不同“测试组”来说,它似乎是一个很好的用例,可以动态创建所需的确切测试。 ..tree继承在这里看起来不是正确的模型。 – Shashank