Python2.7のunittestのassertRaisesはコンテキストマネージャーとして使用出来る
テスト対象
def add(x, y): return x + y
適当すぎだけどご勘弁。異なった型同士を足そうとすれば当然TypeError吐きますよね。
本題
Python2.7以前のunittestのassertRaisesは assertRaises(exception, callback, *args, **kwargs) というように呼び出す必要があった。
class SomeTest(unittest.TestCase): def test_add(self): # 正しい書き方 self.assertRaises(TypeError, add, (2, [1, 2, 3])) # 間違った書き方 self.assertRaises(TypeError, add(2, [1, 2, 3]))
このテストを実行すると間違った書き方のところでassertRaisesがTypeErrorを捕らえきれずに普通にテストが落ちます。でも、見た目的に間違った書き方のほうが感覚的にはしっくりするよなーっていうのが本音。
Python2.7以降のassertRaisesはコンテキストマネージャーとして使える
で、python2.7からはassertRaisesがコンテキストマネージャーとして使えるよう変更が加えられた。これにより、より直感的なこのような書き方が可能になった。
class SomeTest(unittest.TestCase): def test_add(self): with self.assertRaises(TypeError): add(2, [1, 2, 3])
実にスッキリしていてわかりやすい。まさにPythonicってやつですね。