运行特定测试用例时报ImportError:Django单测提示找不到测试模块
问题核心原因
你的报错由三类问题叠加导致:测试命令路径不符合Django/Unittest的导入规则、误删应用包标识文件、测试代码本身存在语法错误。
定位依据
- 测试用例的层级路径写法完全错误
Unittest(Django测试命令的底层实现)加载测试用例的路径格式固定为:应用名.测试所在的模块文件.测试类名.测试方法名。
你的CreateWalletTestCase类是定义在api/tests.py文件内的,并非直接作为api包下的独立模块,所以你写的api.CreateWalletTestCase会被解析成“api目录下的CreateWalletTestCase.py模块”,自然找不到。 - 误删api应用的
__init__.py文件
你参考的旧方案仅适配Python2时代的环境,Python3.3+虽然支持无__init__.py的命名空间包,但Django识别合法应用包、加载内部模块的逻辑仍要求应用根目录保留标准的__init__.py文件,缺失会导致Django根本无法正常导入api包下的任何内容。另外注意__init__.py是前后带双下划线的固定文件名,不能改写成init.py。 - 测试类代码存在语法错误
你贴出的测试代码最后一行断言缺少闭合的单引号和括号:self.assertEqual(data['status'], 'OK语法错误会导致整个tests.py文件无法被Python解释器导入,哪怕路径写对也会触发导入失败。
解决步骤
- 第一步:恢复api应用的
__init__.py
在api目录下新建一个空的、文件名为__init__.py的文件即可,不需要写任何内容。 - 第二步:修正测试运行命令
按照规则,指定运行单个测试方法的正确命令为:python manage.py test api.tests.CreateWalletTestCase.test_create_wallet
如果你的测试类写在其他自定义测试文件中(比如你目录下的te_sts_2.py),只需把路径中的tests替换成对应的文件名即可,例如测试类在api/te_sts_2.py中时,命令为:python manage.py test api.te_sts_2.CreateWalletTestCase.test_create_wallet
不要直接执行不带应用和测试文件前缀的python manage.py test CreateWalletTestCase.test_create_wallet,Unittest无法自动跨包定位同名测试类。 - 第三步:修复测试代码的语法错误
把tests.py中最后一行断言补全为:self.assertEqual(data['status'], 'OK')
可以先执行以下命令验证tests.py是否能正常导入,无报错再跑测试:python manage.py shell -c "from api import tests" - 第四步:基础配置校验
如果仍有导入问题,先运行python manage.py test api跑全应用测试,排查基础问题:- 检查
myapp/settings.py中的INSTALLED_APPS列表里是否正确添加了'api'或对应的应用配置类'api.apps.ApiConfig' - 确认没有手动修改Python运行路径的相关配置,避免包路径识别错乱
- 检查
内容的提问来源于stack exchange,提问作者Volatil3
相关产品推荐
相关产品推荐

