テストセットアップに重大な重複がある場合、継承を使用するようにDRYを維持できます。しかし、これは、テスト実行の不要な重複の問題が発生します。派生クラスのテストで親クラスのテストが再実行されるのはなぜですか?
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
なぜですか?これは設計によるものですか?テストランナーを特定の方法で設定することで無効にすることはできますか?
セットアップを未検出のクラスに移動し、複数の継承を使用して問題を回避することはできますが、ハッキーで不必要なようです。
注:同じ問題は、このような鼻(nosetests -s example.py
)とpytest(py.test example.py
)
をまたは何でもそれがありません) 'test_'を開始するメソッドに対しては継承されたものも見つけます。私はこれを解決するには*複数の継承が必要だとは思わない。 'test_'メソッドを持たない、発見できない第3のクラスに必要なものを抽象化し、両方を継承させます。 – jonrsharpe
testで接頭辞付きのメソッドを含む親クラスを持つサブクラスを調べると、それらのメソッドでサブクラスが表示されます。これはPythonのOOPです。私はセットアップ方法をミックスインまたは別のベースクラスとして動かすことはまったく問題ないと思っています。おそらくDRYerです – dm03514
必要な正確なテストをダイナミックに作成するテストの異なる "グループ"のミックスインの素晴らしいユースケースのようです。 ..tree-inheritanceはここで正しいモデルのようには見えません。 – Shashank