Учебники

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 (исключение, регулярное выражение, вызываемое, * 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 () test не является первым аргументом. «Точка» находится во второй строке аргумента.

================================================================
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 будет выдано. Следовательно, будет показан следующий результат —