РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
772 of 818 menu

Метод assertRaisesMessage

Метод assertRaisesMessage применяется к экземпляру TestCase и проверяет, что в блоке кода возникает ожидаемое исключение с определенным сообщением. Метод принимает три аргумента: класс ожидаемого исключения, ожидаемое сообщение и вызываемый объект или блок кода. Если исключение не возникает или сообщение не совпадает, тест считается проваленным. Метод удобно использовать для тестирования валидаций и обработки ошибок в моделях и представлениях.

Синтаксис

self.assertRaisesMessage(expected_exception, expected_message, callable, *args, **kwargs)

Где параметры означают следующее:

  • expected_exception - класс исключения, которое должно возникнуть
  • expected_message - строка, которая должна содержаться в сообщении исключения
  • callable - вызываемый объект или функция, в которой ожидается исключение
  • *args и **kwargs - аргументы, передаваемые в вызываемый объект

Также метод может использоваться в качестве контекстного менеджера:

with self.assertRaisesMessage(ValueError, "Invalid value"): # код, который должен вызвать ValueError с указанным сообщением

Пример . Проверка исключения в функции

Давайте проверим, что функция divide вызывает исключение ZeroDivisionError с сообщением при делении на ноль:

from django.test import TestCase class MathTestCase(TestCase): def test_divide_by_zero(self): def divide(a, b): if b == 0: raise ZeroDivisionError("Cannot divide by zero") return a / b self.assertRaisesMessage( ZeroDivisionError, "Cannot divide by zero", divide, 10, 0 )

Пример . Проверка исключения в модели

Давайте проверим, что при создании статьи с пустым заголовком возникает исключение с сообщением об ошибке:

from django.test import TestCase from django.db import IntegrityError from myapp.models import Article class ArticleTestCase(TestCase): def test_empty_title_raises_error(self): with self.assertRaisesMessage( IntegrityError, "NOT NULL constraint failed" ): Article.objects.create(title="", content="Some content")

Результат выполнения кода:

"IntegrityError: NOT NULL constraint failed"

Пример . Проверка частичного совпадения сообщения

Метод assertRaisesMessage проверяет, что ожидаемое сообщение содержится в сообщении исключения, а не обязательно полностью совпадает с ним:

from django.test import TestCase class UserTestCase(TestCase): def test_invalid_email(self): def validate_email(email): if "@" not in email: raise ValueError("Invalid email address: missing @ symbol") return True with self.assertRaisesMessage(ValueError, "missing @"): validate_email("invalid-email")

Результат выполнения кода:

"ValueError: Invalid email address: missing @ symbol"

Пример . Проверка исключения в представлении

Давайте проверим, что при передаче некорректного ID в представление возникает исключение Http404 с нужным сообщением:

from django.test import TestCase from django.http import Http404 from myapp.views import get_article class ViewTestCase(TestCase): def test_article_not_found(self): with self.assertRaisesMessage(Http404, "Article not found"): get_article(999)

Смотрите также

  • метод assertRaisesMessage,
    который проверяет исключение с заданным сообщением
  • метод assertContains,
    который проверяет наличие содержимого в ответе
  • метод assertRedirects,
    который проверяет корректность редиректа
  • метод assertNumQueries,
    который проверяет количество запросов к базе данных
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить