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

标签 python django unit-testing

我正在使用 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/

相关文章:

python - Pandas :获取系列的前 10 个元素

android - 如何使用python捕获android屏幕

python - 删除使用图像创建的 tkinter 按钮的边框

python - 如何使用python从容器中下载所有blob,其中blob是子目录样式

python - 如何在logging.ini文件中使用django设置?

python - Django FutureFqType匹配查询不存在

python - 生产聊天应用程序上的 Websocket :

ios - 使用 iOS 实现单元测试

c# - 生成唯一密码

android - Robolectric:如何设置希望 Calendar 类返回的时间?