How do I import the Django DoesNotExist exception?
I'm trying to create a UnitTest to verify that an object has been deleted.
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>'))
I keep getting the error:
DoesNotExist: Answer matching query does not exist.
Solution 1:
You can also import ObjectDoesNotExist
from django.core.exceptions
, if you want a generic, model-independent way to catch the exception:
from django.core.exceptions import ObjectDoesNotExist
try:
SomeModel.objects.get(pk=1)
except ObjectDoesNotExist:
print 'Does Not Exist!'
Solution 2:
You don't need to import it - as you've already correctly written, DoesNotExist
is a property of the model itself, in this case Answer
.
Your problem is that you are calling the get
method - which raises the exception - before it is passed to assertRaises
. You need to separate the arguments from the callable, as described in the unittest documentation:
self.assertRaises(Answer.DoesNotExist, Answer.objects.get, body__exact='<p>User can reply to discussion.</p>')
or better:
with self.assertRaises(Answer.DoesNotExist):
Answer.objects.get(body__exact='<p>User can reply to discussion.</p>')
Solution 3:
DoesNotExist
is always a property of the model that does not exist. In this case it would be Answer.DoesNotExist
.