Я пытаюсь создать UnitTest, чтобы убедиться, что объект был удален.
from django.utils import unittest
def test_z_Kallie_can_delete_discussion_response(self):
...snip...
self._driver.get("http://localhost:8000/questions/3/want-a-discussion")
self.assertRaises(Answer.DoesNotExist, Answer.objects.get(body__exact = '<p>User can reply to discussion.</p>'))
Я получаю сообщение об ошибке:
DoesNotExist: Answer matching query does not exist.
django
unit-testing
exception
BryanWheelock
источник
источник
Ответы:
Его не нужно импортировать - как вы уже правильно написали
DoesNotExist
, в данном случае это свойство самой моделиAnswer
.Ваша проблема в том, что вы вызываете
get
метод, который вызывает исключение, прежде чем он будет переданassertRaises
. Вам необходимо отделить аргументы от вызываемого, как описано в документации unittest :или лучше:
источник
self.assertRaises(Answer.DoesNotExist, Answer.objects.get, body__exact = '<p>User can reply to discussion.</p>')
- то есть сget
аргументами, добавленными как отдельные аргументы kw, а не внутри()
.with
решение сработало для меня.Вы также можете импортировать
ObjectDoesNotExist
изdjango.core.exceptions
, если хотите универсальный, независимый от модели способ перехвата исключения:источник
DoesNotExist
всегда является несуществующим свойством модели. В этом случае было быAnswer.DoesNotExist
.источник
Следует обратить внимание на то, что второй параметр
assertRaises
должен быть вызываемым, а не просто свойством. Например, у меня возникли трудности с этим утверждением:но это сработало нормально:
источник
источник
Вот как я делаю такой тест.
источник