개체가 삭제되었는지 확인하기 위해 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.
답변
이미 올바로 작성 했으므로 가져올 필요가 없습니다 . DoesNotExist
이 경우 모델 자체의 속성입니다 Answer
.
귀하의 문제는 get
전달되기 전에 예외를 발생 시키는 메서드를 호출하고 있다는 것 assertRaises
입니다. unittest 문서에 설명 된대로 콜 러블에서 인수를 분리해야합니다 .
self.assertRaises(Answer.DoesNotExist, Answer.objects.get, body__exact='<p>User can reply to discussion.</p>')
이상 :
with self.assertRaises(Answer.DoesNotExist):
Answer.objects.get(body__exact='<p>User can reply to discussion.</p>')
답변
예외를 포착하는 일반적인 모델 독립적 인 방법을 원한다면 ObjectDoesNotExist
에서 가져올 수도 있습니다 django.core.exceptions
.
from django.core.exceptions import ObjectDoesNotExist
try:
SomeModel.objects.get(pk=1)
except ObjectDoesNotExist:
print 'Does Not Exist!'
답변
DoesNotExist
항상 존재하지 않는 모델의 속성입니다. 이 경우 Answer.DoesNotExist
.
답변
한 가지주의해야 할 점은 두 번째 매개 변수가 속성이 아니라 호출 가능 assertRaises
해야 한다는 것입니다. 예를 들어, 나는이 진술에 어려움을 겪었습니다.
self.assertRaises(AP.DoesNotExist, self.fma.ap)
그러나 이것은 잘 작동했습니다.
self.assertRaises(AP.DoesNotExist, lambda: self.fma.ap)
답변
self.assertFalse(Answer.objects.filter(body__exact='<p>User...discussion.</p>').exists())
답변
이것이 제가 그런 테스트를하는 방법입니다.
from foo.models import Answer
def test_z_Kallie_can_delete_discussion_response(self):
...snip...
self._driver.get("http://localhost:8000/questions/3/want-a-discussion")
try:
answer = Answer.objects.get(body__exact = '<p>User can reply to discussion.</p>'))
self.fail("Should not have reached here! Expected no Answer object. Found %s" % answer
except Answer.DoesNotExist:
pass # all is as expected