1

考虑这个测试函数

    @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,有没有办法测试/验证引发的错误?

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

4

1 回答 1

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)
于 2013-03-25T23:14:36.913 回答