Hatena::ブログ(Diary)

podhmoの日記

 | 

2011-03-23

標準ライブラリのunittestで例外の発生を確認するテスト

| 01:56

unittestで例外の発生を確認したい。thunkを作れば良さそう。

raiseが文じゃなければlambdaで包むだけで大丈夫なのだけど。

対象

  • unittestを使いたい(他のライブラリ入れるの面倒)
  • 例外の発生を確認するテストケースを書きたい

MyExceptionを検知

自分で定義したMyExceptionという例外を検知したい。

occurredMyExceptioinというメソッドを作成。

import unittest

class MyException(Exception):
    pass

class MyTest(unittest.TestCase):
    def occuredMyException(self, thunk):
        try:
            thunk()
            return False
        except MyException:
            return True

    def testraiseException(self):
        def thunk():
            raise MyException
        self.occuredMyException(thunk)

if __name__ == "__main__":
    unittest.main()

このままだと、例外毎にその例外を確認するメソッドを定義しなければならない。

引数として例外を渡せるようにしたい。

parametricに

import unittest

class MyException(Exception):
    pass

class ExtTestCase(unittest.TestCase):
    def __init__(self, *args, **kw):
        super(ExtTestCase, self).__init__(*args, **kw)
        
    def assertRaisedException(self, exception, thunk):
        try:
            thunk()
            return False
        except Exception, e:
            if isinstance(e, exception):
                return True
            else:
                raise e

class MyTestCase(ExtTestCase):
    def testMyException(self):
        def thunk():
            raise MyException
        self.assertRaisedException(MyException, thunk)

if __name__ == "__main__":
    unittest.main()

imagawa_yakataimagawa_yakata 2011/03/24 03:27 例外の送出の検証はTestCase.assertRaisesで一応できるようです。http://d.hatena.ne.jp/imagawa_yakata/20110323/1300904476

podhmopodhmo 2011/03/24 10:15 本当だ存在していた。http://docs.python.org/library/unittest.html#unittest.TestCase.assertRaises

トラックバック - http://d.hatena.ne.jp/podhmo/20110323/1300899406
リンク元
 |