gpt4 book ai didi

python - Django 的单元测试会引发异常警告吗?

转载 作者:太空宇宙 更新时间:2023-11-03 11:36:14 26 4
gpt4 key购买 nike

我正在使用 Django 的单元测试设备 (manage.py test),它抛出错误并在代码生成警告时停止。使用标准 Python unittest 模块测试时,同样的代码会生成警告,但会继续执行代码。

一项小研究表明,可以将 Python 设置为对异常发出警告,我认为这会导致测试框架认为发生了错误。不幸的是,有关测试的 Django 文档对“错误”的定义或如何修改警告的处理方式略有说明。

那么:Django 单元测试框架是否默认设置为对错误发出警告? Django 中是否有一些工具可以改变这种行为?如果没有,有人对我如何让 Django 打印出错误但继续执行代码有什么建议吗?还是我完全误诊了问题?

更新:测试代码因调用 MySQLdb 引发的警告而停止。这些调用是由一个模块发出的,该模块在 Python 单元测试框架下进行测试时会抛出相同的警告,但不会停止。我会想出一种有效的方法来尝试用足够简洁的代码来复制这种情况,以便发布。

回答:

更多的研究表明这种行为与 Django 的 MySQL 后端有关:

/usr/...django/.../mysql/base.py:

if settings.DEBUG:
...
filterwarnings("error", category=Database.Warning)

当我将 settings.py 更改为 DEBUG = False 时,代码会抛出警告但不会停止。

我以前在 Django 中没有遇到过这种行为,因为我的数据库调用是由我自己的后端生成的。因为我没有调用 Django 后端,所以我没有重置对警告的处理,尽管有警告,代码仍在继续。 Django 测试框架肯定会调用 Django 后端——它对数据库执行各种操作——并且该调用会在我的代码被调用之前重置警告处理。

最佳答案

鉴于更新后的信息,我倾向于说这是 Django 应该做的正确事情; MySQL 的警告可以指示任何数量的事情,包括数据丢失(例如,如果您尝试插入一个大于列可以容纳的值,MySQL 将发出警告并静默截断),这就是您想要的事情测试时了解。因此,最好的办法可能是查看它生成的警告并更改您的代码,以便它不再导致这些警告发生。

关于python - Django 的单元测试会引发异常警告吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1658265/

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