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