Я искал документацию, но не смог найти ее. Были пара, которые не очень объясняли.
Может кто-нибудь объяснить мне Нос
assert_raises(what should I put here?)
и как его использовать?
Я искал документацию, но не смог найти ее. Были пара, которые не очень объясняли.
Может кто-нибудь объяснить мне Нос
assert_raises(what should I put here?)
и как его использовать?
Тестирование функции assert_raises()
позволяет убедиться, что вызов функции вызывает указанное исключение при представлении определенных параметров.
Например, если у вас есть функция add
, которая добавляет два числа, она должна, вероятно, поднять TypeError
, когда вы передадите ее, скажем, целое число и строку. Итак:
from nose.tools import assert_raises
def add(x, y):
return x + y
assert_raises(TypeError, add, 2, "0")
Первый аргумент - это тип исключения, который вы ожидаете. Вторая функция - вызов. Остальные аргументы будут переданы функции (в этом случае они станут x
и y
внутри функции).
Если ожидаемое исключение вызвано функцией, утверждение проходит.
Хотя принятый ответ верен, я думаю, что лучше использовать метод assert_raises
.
Если вы просто хотите утверждать, что возникает исключение, возможно, проще и чище использовать синтаксис @raises
.
@raises(HTTPError)
def test_exception_is_raised:
call_your_method(p1, p2)
Однако предположим, что вы хотите сделать бит больше с повышенным исключением, например: нам нужно утверждать, что повышенный HTTPError имеет тип 401: неавторизованный, а не 500: ошибка сервера.
В такой ситуации синтаксис не так полезен, мы должны использовать assert_raises
, но по-другому.
Если мы не передадим его callable
, поскольку второй параметр assert_raises
вернет обратно контекст, который мы можем использовать для дальнейшего тестирования деталей исключения.
def test_exception_is_raised:
with assert_raises(HTTPError) as cm:
call_your_method(p1, p2)
ex = cm.exception # raised exception is available through exception property of context
ok_(ex.code == 401, 'HTTPError should be Unauthorized!')