グラフf()、g()、h()には、同じ問題に対して異なるアルゴリズムを実装するいくつかの関数があります。unittestフレームワークを使用してこれらの関数をユニットテストしたいと思います。
アルゴリズムごとに、いくつかの制約が常に有効である必要があります(空のグラフ、ノードが1つしかないグラフなど)。これらの一般的な制約チェックのコードは複製しないでください。したがって、私が設計を開始したテストアーキテクチャは次のとおりです。
class AbstractTest(TestCase):
def test_empty(self):
result = self.function(make_empty_graph())
assertTrue(result....) # etc..
def test_single_node(self):
...
次に、特定のテストケース
class TestF(AbstractTest):
def setup(self):
self.function = f
def test_random(self):
#specific test for algorithm 'f'
class TestG(AbstractTest):
def setup(self):
self.function = g
def test_complete_graph(self):
#specific test for algorithm 'g'
...各アルゴリズムについても同様です
残念ながら、nosetestsは、AbstractTestで各テストを実行しようとしますが、実際のself.functionがサブクラスで指定されているため、機能しません。AbstractTestケースで設定__test__ = False
してみましたが、この場合、テストはまったく実行されません(このフィールドは継承されていると思います)。抽象基本クラス(abc.ABCMeta)で試しましたが成功しませんでした。私はMixInについて何の結果もなく読んだことがあります(私はそれについて本当に自信がありません)。
テストコードを因数分解しようとしているのは私だけではないと確信しています。Pythonでそれをどのように行いますか?
ありがとう。