有人可以向我解释如何正确测试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)
Run Code Online (Sandbox Code Playgroud)
在这里它捕获IntegrityError但是然后所有操作都将失败,因为这就是postgres的工作方式,好吧.我在docs中看到我可以使用transaction.rollback()但在哪里:在test或save()方法中?
另外,我不喜欢手工编写回滚的想法,为什么django不能尝试保存,如果失败 - 给我IntegrityError并让我继续工作.
我正在使用django 1.1
不要更改 save() 方法,因为您希望它在正常操作下传播。您应该在 Test 类中捕获异常并在那里回滚(请注意,由于您正在测试事务,因此您必须子类 TransactionalTestCase 而不是正常的 TestCase)。