簡體   English   中英

django Postgres IntegrityError

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM