如何在单元测试中屏蔽RemovedInDjango40Warning警告?
解决Django 4.0废弃警告屏蔽失效问题
问题根源
你当前的警告屏蔽代码写在test_all方法内部,但触发警告的时机更早:在django.setup()执行、application.poc和eav.models模块导入时,这些警告就已经输出了,此时你的屏蔽逻辑还未运行,所以无法生效。
有效解决方法
方法一:提前在测试文件顶部屏蔽警告
将屏蔽代码移到测试文件的最开头,确保在任何Django相关模块导入前执行:
import warnings from django.utils.deprecation import RemovedInDjango40Warning # 优先设置警告过滤 warnings.simplefilter("ignore", category=RemovedInDjango40Warning) from unittest import TestCase import django # 注意这里应该是小写的django,你之前的代码写错了 class TestPocFunctional(TestCase): @classmethod def setUpClass(cls): django.setup() return def test_all(self): from application.poc import PocFunctional # ... 测试步骤 return
方法二:全局配置中屏蔽警告
如果希望所有测试和项目运行都屏蔽该警告,直接在项目的settings.py中添加过滤逻辑:
import warnings from django.utils.deprecation import RemovedInDjango40Warning warnings.simplefilter('ignore', RemovedInDjango40Warning)
方法三:通过PyCharm运行配置屏蔽
无需修改代码,直接在测试运行配置中添加命令行参数:
- 打开PyCharm的Run/Debug Configurations
- 找到对应的单元测试配置,在Parameters栏添加:
-W ignore::django.utils.deprecation.RemovedInDjango40Warning - 保存配置后重新运行测试即可。
内容的提问来源于stack exchange,提问作者James
相关产品推荐
相关产品推荐

