UnitTestフレームワーク-例外テスト

Pythonテストフレームワークは、例外が発生したことを確認するために次のアサーションメソッドを提供します。

assertRaises(exception、callable、* args、** kwds)

関数が位置引数またはキーワード引数を使用して呼び出されたときに、例外(最初の引数)が発生することをテストします。予期された例外が発生した場合はテストに合格し、別の例外が発生した場合はエラーになり、例外が発生しなかった場合は失敗します。例外のグループのいずれかをキャッチするために、例外クラスを含むタプルを例外として渡すことができます。

以下の例では、ZeroDivisionErrorが発生したかどうかを確認するためのテスト関数が定義されています。

import unittest

def div(a,b):
   return a/b
class raiseTest(unittest.TestCase):
   def testraise(self):
      self.assertRaises(ZeroDivisionError, div, 1,0)

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

testraise()関数はassertRaises()関数を使用して、div()関数が呼び出されたときにゼロによる除算が発生するかどうかを確認します。上記のコードは例外を発生させます。ただし、div()関数の引数を次のように変更します-

self.assertRaises(ZeroDivisionError, div, 1,1)

これらの変更を加えてコードを実行すると、ZeroDivisionErrorが発生しないため、テストは失敗します。

F
================================================================
FAIL: testraise (__main__.raiseTest)
----------------------------------------------------------------------
Traceback (most recent call last):
   File "raisetest.py", line 7, in testraise
      self.assertRaises(ZeroDivisionError, div, 1,1)
AssertionError: ZeroDivisionError not raised

----------------------------------------------------------------------
Ran 1 test in 0.000s

FAILED (failures = 1)

assertRaisesRegexp(exception、regexp、callable、* args、** kwds)

発生した例外の文字列表現で正規表現が一致することをテストします。regexpは、正規表現オブジェクト、またはre.search()での使用に適した正規表現を含む文字列です。

次の例は、assertRaisesRegexp()の使用方法を示しています-

import unittest
import re

class raiseTest(unittest.TestCase):
   def testraiseRegex(self):
      self.assertRaisesRegexp(TypeError, "invalid", reg,"Point","TutorialsPoint")
      
if __name__ == '__main__':
   unittest.main()

ここで、testraseRegex()テストは最初の引数として失敗しません。「ポイント」は2番目の引数文字列にあります。

================================================================
FAIL: testraiseRegex (__main__.raiseTest)
----------------------------------------------------------------------
Traceback (most recent call last):
   File "C:/Python27/raiseTest.py", line 11, in testraiseRegex
      self.assertRaisesRegexp(TypeError, "invalid", reg,"Point","TutorialsPoint")
AssertionError: TypeError not raised
----------------------------------------------------------------------

ただし、変更は以下のとおりです。

self.assertRaisesRegexp(TypeError, "invalid", reg,123,"TutorialsPoint")

TypeError例外がスローされます。したがって、次の結果が表示されます-

================================================================
FAIL: testraiseRegex (__main__.raiseTest)
----------------------------------------------------------------------
Traceback (most recent call last):
   File "raisetest.py", line 11, in testraiseRegex
      self.assertRaisesRegexp(TypeError, "invalid", reg,123,"TutorialsPoint")
AssertionError: "invalid" does not match 
   "first argument must be string or compiled pattern"
----------------------------------------------------------------------