Ассерты

Что такое ассерты?

подробнее

Ассерты (Asserts) — это проверки, которые подтверждают, что ожидаемое поведение совпадает с реальным. В Python для этого используется встроенное ключевое слово assert. Если условие True — тест идет дальше, если False — тест падает с ошибкой AssertionError.

Примеры

# стандартный assert
assert 5==6

# assert с текстом ошибки
assert 1==2, "Этот текст выведется при ошибке"

Что такое hard и soft assert?

подробнее

Hard Asserts (Жесткие ассерты) - Это стандартный assert. Как только один assert внутри теста не выполняется, выполнение теста немедленно прерывается.
Soft Asserts (Мягкие ассерты) - Доступны с плагином pytest-check. Если проверка не прошла, тест не останавливается, а продолжает идти до конца, фиксируя все ошибки по пути. В финале отчет покажет список всех найденных нестыковок.

Пример

import pytest_check as check

def test_user_profile(user):
    check.equal(user.name, "Alice")
    check.equal(user.email, "alice@work.com") # Даже если упадет, тест пойдет дальше
    check.is_true(user.is_admin)

Как проверить исключения (Exception)?

подробнее

Иногда нужно проверить, что код должен выдать ошибку (например, при вводе неверного пароля).
Контекстный менеджер pytest.raises «ловит» исключение. Если оно возникло — тест пройден. Если код выполнился без ошибок или упал с другой — тест провален.

Примеры

# простой пример
def test_zero_division():
    with pytest.raises(ZeroDivisionError):
        1 / 0

# проверка текста ошибки
def test_error_text():
    with pytest.raises(ValueError, match="Invalid age"):
        user_create(age=-5)
# доступ к деталям исключения
def test_complex_error():
    with pytest.raises(MyCustomError) as exc_info:
        do_something()

    assert exc_info.value.code == 404  # Проверяем атрибуты ошибки

Как проверить предупреждения?

подробнее

Проверка предупреждений полезна например при работе с библиотеками, которые скоро обновятся (deprecation warnings). Работает по той же логике, что и исключения.
Контекстный менеджер pytest.warns используется, когда код должен выдать Warning.

Пример

import warnings

def test_warning():
    with pytest.warns(UserWarning, match="Deprecated"):
        warnings.warn("This is Deprecated", UserWarning)