135

オブジェクトが削除されたことを確認するために 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.
4

6 に答える 6

201

例外をキャッチするための一般的なモデルに依存しない方法が必要な場合は、ObjectDoesNotExistからインポートすることもできます。django.core.exceptions

from django.core.exceptions import ObjectDoesNotExist

try:
    SomeModel.objects.get(pk=1)
except ObjectDoesNotExist:
    print 'Does Not Exist!'
于 2012-06-19T21:26:30.260 に答える
147

インポートする必要はありません。すでに正しく記述されているためDoesNotExist、この場合はモデル自体のプロパティですAnswer

問題は、にget渡される前にメソッドを呼び出していることです。これにより、例外が発生しassertRaisesます。単体テストのドキュメントで説明されているように、引数を呼び出し可能オブジェクトから分離する必要があります。

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>')
于 2012-06-19T21:28:56.420 に答える
12

DoesNotExistは常に存在しないモデルのプロパティです。この場合は になりますAnswer.DoesNotExist

于 2012-06-19T21:19:42.270 に答える
3
self.assertFalse(Answer.objects.filter(body__exact='<p>User...discussion.</p>').exists())
于 2016-01-28T09:19:01.097 に答える
3

注意すべきことの 1 つは、 の 2 番目のパラメーターが単なるプロパティではなく呼び出し可能であるassertRaises 必要があることです。たとえば、次のステートメントには苦労しました。

self.assertRaises(AP.DoesNotExist, self.fma.ap)

しかし、これはうまくいきました:

self.assertRaises(AP.DoesNotExist, lambda: self.fma.ap)
于 2013-03-18T04:59:18.847 に答える
0

これが私がそのようなテストをする方法です。

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
于 2012-06-19T21:28:33.157 に答える