當在測試設置中有重大的重疊時,它可以讓事情繼續使用繼承。但是,這會造成一些問題與測試執行的不必要的重複:爲什麼派生類中的測試重新運行父類測試?
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