有人可以向我解释如何正确测试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的工作方式,好的。我在文档中看到可以使用transaction.rollback()但在哪里:在测试中还是在save()方法中?

另外,我不喜欢手工编写回滚的想法,为什么django不能只尝试保存,如果失败,请给我IntegrityError并让我继续工作。

我正在使用django 1.1

最佳答案

不要更改save()方法,因为您希望它在常规操作下传播。您应该在Test类中捕获异常并回滚到那里(请注意,由于您正在测试事务,因此必须将TransactionalTestCase子类化,而不是常规TestCase子类化)。

关于django - django Postgres IntegrityError,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1305535/

10-11 16:16