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

1 投票
1 回答
828 浏览
提问于 2025-04-17 20:16

考虑这个测试函数

    @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()

这个测试会失败,因为用户邮箱这一列设置了 unique=True,所以会出现 IntegrityError 错误。

这个测试可以正常运行,但我想检查一下我遇到的错误是否是 IntegrityError。有没有办法来测试或验证这个错误呢?

因为错误可能在最后一条语句执行之前就发生了,这样我们的测试就会出现误判。

1 个回答

3

你可以使用 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)

撰写回答