Структура UnitTest - Тест исключений

Платформа тестирования Python предоставляет следующие методы утверждения для проверки возникновения исключений.

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

================================================================
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"
----------------------------------------------------------------------