![](/img/trans.png)
[英]Django, postgres: IntegrityError null value in column, but column should accept null
[英]django Postgres IntegrityError
有人可以向我解釋如何正確測試Postgres DB錯誤,特別是IntegrityError。 例如,我有下一個測試:
class TestSlugs(TestCase):
# This slug must be unique
b = BookPublisher(slug=self.duplicate_slug)
self.assertRaises(IntegrityError, b.save)
#check if there's only one BookPublisher
self.assertEquals(BookPublisher.objects.count(), 1)
在這里它捕獲IntegrityError但是然后所有操作都將失敗,因為這就是postgres的工作方式,好吧。 我在docs中看到我可以使用transaction.rollback()但在哪里:在test或save()方法中?
另外,我不喜歡手工編寫回滾的想法,為什么django不能嘗試保存,如果失敗 - 給我IntegrityError讓我繼續工作。
我正在使用django 1.1
不是100%確定這是有效的,但你可以這樣做:
def save(self):
transaction.commit()
try:
super(MyModel, self).save()
except IntegrityError:
transaction.rollback()
else:
transaction.commit()
不要更改save()方法,因為您希望它在正常操作下傳播。 您應該在Test類中捕獲異常並在那里回滾(請注意,因為您正在測試事務,所以必須繼承TransactionalTestCase而不是普通的TestCase)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.