標準ライブラリのunittestで例外の発生を確認するテスト
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()