我已阅读this问答,并且已经尝试通过这种方式在我的代码中引发IntegrityError异常:

self.assertRaises(IntegrityError, db.session.commit())

但是以某种方式,我的单元测试仍然失败,并因IntegrityError异常而停止。我希望它说的很好,因为我已经期望单元测试中有异常。
这是由试图插入具有相同唯一字段值的行的代码引起的。

任何想法?

最佳答案

其中之一将达到目的:

# ... only if version >= 2.7
with self.assertRaises(IntegrityError):
    db.session.commit()

或者:
self.assertRaises(IntegrityError, db.session.commit)

您的示例和正确方法之间的区别是:
# Your example: You call db.session.commit(), this will raise an exception before
# assertRaises is called
self.assertRaises(IntegrityError, db.session.commit())

# Correct way: Pass what should be called to assertRaises,
# let assertRaises invoke it and check for exception
self.assertRaises(IntegrityError, db.session.commit)

我更喜欢使用assertRaises作为上下文管理器(使用with)。

关于python - 测试抛出IntegrityError的SQLAlchemy代码的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19289291/

10-10 18:28