Python
unittest

【Python】例外を拾ったりassertRaises等で拾うときのTips

pythonのunittestを書いていてとても初歩的なところでつまづいてて情けなかったのでメモ。

ある条件下でちゃんと期待した例外をあげるかを確認するテストケースを書いてて、
はじめこう書いていたのです。

def test_raise_error_method(self):
    with self.assertRaises(Exception):
        raise FileNotFoundError('file not found')  ## 例外を上げる処理(メソッド)をここに書く

assertRaisesExceptionと書いてて、
raise で、FileNotFoundErrorと書いているのでこのテストケースは失敗するものと思ってた。

なのですが成功(OK)と出る・・・。

悩んだ挙句に人に聞いたところ、
「FileNotFoundErrorはExceptionのサブクラスだから、Exceptionで拾うと全部それにひっかかる」

あ、そうなんだ。と。

調べているときに確かにFileNotFoundErrorがサブクラスというのはドキュメントを見て理解はしていたけど、
まさかそれだったとは。

とはいえ確かに言われてみれば何が返ってくるかわからないときはとりあえずExceptionで拾うときあるし、それと同じかー。
と思うことで納得。

IT業界はまだまだ知らないことだらけです。