Unittest-framework-exceptions-test

提供:Dev Guides
移動先:案内検索

UnitTest Framework-例外テスト

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

assertRaises(例外、呼び出し可能、* 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_が一致することをテストします。 regexpは、正規表現オブジェクト、またはre.search()による使用に適した正規表現を含む文字列です。

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

import unittest
import re

class raiseTest(unittest.TestCase):
   def testraiseRegex(self):
      self.assertRaisesRegexp(TypeError, "invalid", reg,"Point","finddevguides")

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","finddevguides")
AssertionError: TypeError not raised
----------------------------------------------------------------------

ただし、変更は次のようになります-

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

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

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