python:如何针对特定类型的错误测试@ unittest.expectedFailure?

时间:2013-03-25 23:09:57

标签: python unit-testing sqlalchemy

考虑这个测试功能

    @unittest.expectedFailure
    def test_add_existing_user(self):
        user = User('test_add_existing_user', 'welcome')
        db.session.add(user)
        db.session.commit()
        self.assertEquals(1, len(User.query.all()))

        db.session.add(User(user.email, 'welcome'))
        db.session.commit()

此测试将因IntegrityError而失败,因为用户电子邮件列包含unique=True

此测试工作正常,但我需要检查我的测试遇到的错误是IntegrityError,有没有办法测试/验证引发的错误?

因为错误可能在执行最后一个语句之前发生很多,然后我们在测试中会出现误报

1 个答案:

答案 0 :(得分:2)

您可以使用self.assertRaises确保引发特定错误。

def test_add_existing_user(self):
    """
    Checks that unique constraints return an IntegrityError.
    """
    user = User('test_add_existing_user', 'welcome')
    db.session.add(user)
    db.session.commit()
    self.assertEquals(1, len(User.query.all()))

    db.session.add(User(user.email, 'welcome'))
    self.assertRaises(IntegrityError, db.session.commit)