Saya mencoba membuat UnitTest untuk memverifikasi bahwa sebuah objek telah dihapus.
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>'))
Saya terus mendapatkan kesalahan:
DoesNotExist: Answer matching query does not exist.
django
unit-testing
exception
BryanWheelock
sumber
sumber
Jawaban:
Anda tidak perlu mengimpornya - karena Anda sudah menulis dengan benar,
DoesNotExist
adalah properti model itu sendiri, dalam kasus iniAnswer
.Masalah Anda adalah Anda memanggil
get
metode - yang memunculkan pengecualian - sebelum diteruskan keassertRaises
. Anda perlu memisahkan argumen dari callable, seperti yang dijelaskan dalam dokumentasi unittest :atau lebih baik:
sumber
self.assertRaises(Answer.DoesNotExist, Answer.objects.get, body__exact = '<p>User can reply to discussion.</p>')
- yaitu denganget
argumen ditambahkan sebagai argumen kw individu, bukan di dalam a()
.with
solusi yang bekerja untuk saya.Anda juga dapat mengimpor
ObjectDoesNotExist
daridjango.core.exceptions
, jika Anda menginginkan cara umum, model-independen untuk menangkap pengecualian:sumber
DoesNotExist
selalu merupakan properti model yang tidak ada. Dalam hal ini akan terjadiAnswer.DoesNotExist
.sumber
Satu hal yang harus diperhatikan adalah parameter kedua menjadi
assertRaises
harus dapat dipanggil - bukan hanya properti. Misalnya, saya mengalami kesulitan dengan pernyataan ini:tapi ini bekerja dengan baik:
sumber
sumber
Beginilah cara saya melakukan tes semacam itu.
sumber