私はいくつかの不変条件を共有し、共通のインターフェースを持ついくつかのクラスを持っています。それらのそれぞれに対して同じテストを自動的に実行したいと思います。異なるクラスに対して同じテストケースを実行するには?
例として、データセットを分割するためのさまざまなアプローチを実装するいくつかのクラスがあるとします。ここでの共通の不変量は、これらのすべてのクラスについて、すべてのパーティションにわたる結合が元のデータセットと等しくなければならないということです。私は現在持っている何
は次のようになります。
class PartitionerInvariantsTests(unittest.TestCase):
def setUp(self):
self.testDataSet = range(100) # create test-data-set
def impl(self, partitioner):
self.assertEqual(self.testDataSet,
chain.from_iterable(partitioner(self.testDataSet))
その後、私は、私はそのクラスのインスタンスをテストしたいクラスごとimpl
を呼び出す別の関数を追加します。この問題は、複数のテスト関数でこれを行うときに明らかになります。 5つのテスト関数と5つのクラスをテストしたいとします。これは、すべてのテストを呼び出すためにほぼ同じに見える25の関数を作成します。
私が考えていたもう1つのアプローチは、テンプレートをスーパークラスとして実装し、次にテストする各クラスのサブクラスを作成することでした。サブクラスは、クラスをインスタンス化するための関数を提供することができる。その問題は、デフォルトのテストローダーが(使用できない)ベースクラスを有効なテストケースとみなして実行しようとすると失敗するということです。
あなたの提案は何ですか?テストしたい各パーティショナクラスの
class PartitionerInvariantsTests(unittest.TestCase):
def test_impl(self):
self.assertEqual(self.testDataSet,
chain.from_iterable(self.partitioner(self.testDataSet))
class PartitionerATests(PartitionerInvariantsTests):
:
P.S:私は、Python 2.6
unittestは、unittest.TestCase'を継承しない場合、基本クラスを実行しようとしますか? – nmichaels
@Nathon:あなたが言ったので、まだ試していません。 –
@Nathon、あなたのアイデアを回答として投稿したいのであれば、私はうれしく鉱山を削除します。 – unutbu