Подтвердить что ты не робот

Как использовать нос assert_raises?

Я искал документацию, но не смог найти ее. Были пара, которые не очень объясняли.

Может кто-нибудь объяснить мне Нос

assert_raises(what should I put here?)

и как его использовать?

4b9b3361

Ответ 1

Тестирование функции 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 внутри функции).

Если ожидаемое исключение вызвано функцией, утверждение проходит.

Ответ 2

Хотя принятый ответ верен, я думаю, что лучше использовать метод 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!')