gpt4 book ai didi

python - 在 sqlalchemy 代码的单元测试中使用assertRaises 时无法理解结果

转载 作者:行者123 更新时间:2023-11-30 23:47:58 24 4
gpt4 key购买 nike

我正在尝试对我的 sqlalchemy 代码进行单元测试。

    def add_user(*user_details):
try:
u = User(*user_details)
session.add(u)
session.commit()
except:
session.rollback()

现在在我的单元测试中:

    def testDuplicate(self):
add_user(user_detail1,user_detail2)
self.assertRaises(IntegrityError, add_user(user_detail1,user_detail2))

如果 add_user 函数调用引发完整性错误,则此测试应成功;如果没有异常,则此测试应失败。但问题是这两种情况下测试都成功。

为什么会发生这种情况?我的代码有问题吗?或者assertRaises的工作方式与我的预期不同?

起初我以为发生了这种情况,因为我已将 except 放在 try 子句中,并且仅在那里处理异常,并且assertRaises 不会得到异常。但如果是这种情况,那么assertRaises 应该因未收到异常而失败。

如果编写单元测试的方式有问题,请告诉我,因为我仍在学习将单元测试纳入我的编码习惯中。

最佳答案

您错误地使用了assertRaises,您应该这样写:

self.assertRaises(IntegrityError, add_user, user_detail1, user_detail2)

您将函数和参数分别提供给 assertRaises,以便它可以控制何时调用函数(例如,在 assertRaises< 中的 try/except block 中)/)。

另一个问题是被测试的函数正在吞掉错误。尝试一下

def add_user(*user_details):
try:
u = User(*user_details)
session.add(u)
session.commit()
except:
session.rollback()
raise

这将重新引发异常(但允许回滚事务)。

关于python - 在 sqlalchemy 代码的单元测试中使用assertRaises 时无法理解结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8112654/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com