Hatena::ブログ(Diary)

しがないプログラマ の日記 RSSフィード Twitter

0000 | 00 |
2004 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2005 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2006 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 10 | 11 |
2011 | 01 | 03 | 05 | 06 | 07 | 08 | 09 | 11 |
2012 | 01 | 02 | 04 |

2009年11月4日(水)

pythonでunittestをするには

Python2.1以降のバージョンでは、標準でPyUnitというUnitTestのフレームワークがあるので、それを使うことにします。

使い方は簡単で、最初にテスト対象のクラスに対して、〜_test.pyファイルを作成します。そこで unittestモジュールをimportして、unittest.TestCase を継承したクラスを作成。次に、test〜と引数のない(selfだけの)メソッドを用意し、assert〜メソッドでテストを書きます。assert関数の一欄は、5.3.5 TestCase オブジェクト リファレンスを参照してください。必要であれば、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)

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/Horiuchi_H/20091104/1257300153
PV: 485935