pythonでunittestをするには
Python2.1以降のバージョンでは、標準でPyUnitというUnitTestのフレームワークがあるので、それを使うことにします。
使い方は簡単で、最初にテスト対象のクラスに対して、〜_test.pyファイルを作成します。そこで unittestモジュールをimportして、unittest.TestCase を継承したクラスを作成。次に、test〜と引数のない(selfだけの)メソッドを用意し、assert〜メソッドでテストを書きます。assert関数の一欄は、http://www.python.jp/doc/2.4/lib/testcase-objects.htmlのリファレンスを参照してください。必要であれば、setUpメソッドとtearDownメソッドも追加して準備完了です。最後に、unittest.main() を追加して、そのファイルを実行すればテストが動きます。
実際のHogeクラスのテストとして、hoge_test.pyは以下のようになります。
# -*- coding: utf-8 -*- from Hoge import * # テスト対象のモジュールをインポート import unittest class HogeClassTestCase(unittest.TestCase): def setUp(self): pass def tearDown(self): pass def testFooMethod(self): self.assertEqual(1, Hoge().foo()) if __name__ == "__main__": unittest.main()
これで、1クラスづつのテストは簡単にかけます。また、同じファイルに複数のTestCaseクラスを作成しても、unittest.main() だけで全てテストを実行してくれます。
しかし、複数のテストファイルを作成した後でまとめてテストを実行する手段がないようなので、以下のようなコードを書いてみました。
test_all.py として保存して実行すると、同じフォルダ内のテストを全て実行できます。
import imp import os import unittest if __name__ == "__main__": suite = unittest.TestSuite() loader = unittest.TestLoader() for file in os.listdir(os.path.curdir): if os.path.isfile(file) and file.endswith('_test.py'): mod = imp.load_source(os.path.splitext(file)[0], file) suite.addTest(loader.loadTestsFromModule(mod)) unittest.TextTestRunner(verbosity=1).run(suite)