Próbuję utworzyć UnitTest, aby sprawdzić, czy obiekt został usunięty.
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>'))
Ciągle otrzymuję błąd:
DoesNotExist: Answer matching query does not exist.
django
unit-testing
exception
BryanWheelock
źródło
źródło
Odpowiedzi:
Nie musisz go importować - jak już poprawnie napisałeś,
DoesNotExist
jest to w tym przypadku własność samego modeluAnswer
.Twoim problemem jest to, że wywołujesz
get
metodę - która zgłasza wyjątek - zanim zostanie przekazana doassertRaises
. Musisz oddzielić argumenty od wywoływanych, jak opisano w niezatwierdzonej dokumentacji :albo lepiej:
źródło
self.assertRaises(Answer.DoesNotExist, Answer.objects.get, body__exact = '<p>User can reply to discussion.</p>')
- tj. Zget
argumentami dodanymi jako poszczególne argumenty kw, a nie wewnątrz a()
.with
rozwiązanie działało u mnie.Możesz także importować
ObjectDoesNotExist
zdjango.core.exceptions
, jeśli chcesz uzyskać ogólny, niezależny od modelu sposób przechwytywania wyjątku:źródło
DoesNotExist
jest zawsze własnością modelu, który nie istnieje. W tym przypadku tak by byłoAnswer.DoesNotExist
.źródło
Należy zwrócić uwagę na to, że drugi parametr
assertRaises
musi być wywoływalny - a nie tylko właściwość. Na przykład miałem trudności z tym stwierdzeniem:ale to działało dobrze:
źródło
źródło
Tak robię taki test.
źródło