勝手にテストクラスにテストケース(つまりテストメソッド)が追加される、
とかそういうことをやりたい。
で、unittest.TestCaseクラスのサブクラスを
テストデータから動的に生成して実行したいと思ったときに、
どうやれば良いのかちょっと悩んだので、メモ。
動的にサブクラスを生成するのは、
非常に単純でtype関数を使えばできる。
type関数は[クラス名]、[親クラスのタプル(多重継承も可)]、[付与したい属性の辞書]で
動的にクラス生成をできる。
import unittest def create_testmethod(): """ テストメソッドを動的に生成 """ def testMethod(self): self.assertEquals(1,1) return testMethod def create_testclass(): """ TestCaseのサブクラスを動的に生成 """ test_class = type('TestA', (unittest.TestCase,), {}) setattr(test_class,'testMethod',create_testmethod()) return test_class def suite(): """ テストスイートを生成 """ suite = unittest.TestSuite() test_class = create_testclass() suite.addTest(unittest.makeSuite(test_class)) return suite if __name__ == "__main__": unittest.TextTestRunner().run(suite())
動的にテストクラス(unittest.TestCaseのサブクラス)を生成して、
動的にテストメソッドを追加することができる。
これを応用すればソースコード書かずにテストクラス、テストメソッドを動的に追加するようなプログラムができる。
Quick Lookup:
0 件のコメント:
コメントを投稿