program tip

Django DoesNotExist 예외를 가져 오려면 어떻게합니까?

radiobox 2020. 7. 26. 12:51
반응형

Django DoesNotExist 예외를 가져 오려면 어떻게합니까?


개체가 삭제되었는지 확인하기 위해 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

참고 URL : https://stackoverflow.com/questions/11109468/how-do-i-import-the-django-doesnotexist-exception

반응형