Как правильно использовать assertRaises в Django


У меня есть следующая функция проверки в моей модели:

@classmethod
def validate_kind(cls, kind):
    if kind == 'test':
        raise ValidationError("Invalid question kind")

Который я пытаюсь проверить следующим образом:

w = Model.objects.get(id=1) 

self.assertRaises(ValidationError, w.validate_kind('test'),msg='Invalid question kind')

Я тоже попробовал:

self.assertRaisesRegex(w.validate_kind('test'),'Invalid question kind')

Оба они работают неправильно. Что я делаю не так?

1 2

1 ответ:

Способ вызова assertRaises неверен - вам нужнопередать вызываемую вместо вызова самой функции и передать любые аргументы функции в качестве аргументов assertRaises. Измените его на:

self.assertRaises(ValidationError, w.validate_kind, 'test')
Обратите внимание, что вы не можете проверить сообщение об исключении с помощью этой конструкции - Если вы хотите проверить сообщение, вам нужно использовать assertRaises в качестве контекстного менеджера:
with self.assertRaises(ValidationError, msg='Invalid question kind'):
    w.validate_kind('test')