Python3单元测试跨目录执行无测试用例运行问题求助
你的问题主要来自两个核心点:模块导入路径配置不对,以及测试用例缺少执行触发逻辑,下面一步步拆解解决:
1. 先解决模块导入失败的问题
当测试文件放在tests/目录下时,Python默认的模块搜索路径(sys.path)并不包含同级的src/目录——哪怕你加了__init__.py,也只是让目录成为Python包,不会自动把src加入搜索路径。这就导致你写的import user_input其实根本找不到目标模块,但如果你的环境里恰好有同名的系统模块,或者IDE悄悄帮你做了路径兼容,可能不会抛出报错,但测试类里的逻辑其实没正常加载。
两种导入修复方案:
方案一:手动添加src路径到搜索列表
在test_user_input.py的最开头加上这段代码,把项目根目录下的src文件夹加入Python的搜索路径:
import sys from pathlib import Path # 获取项目根目录(Project/)的绝对路径 project_root = Path(__file__).parent.parent # 把src目录加入sys.path sys.path.append(str(project_root / "src")) # 之后再正常导入模块和unittest import unittest import user_input
方案二:用相对导入(需以包方式运行)
把tests也当作一个子包,用相对导入指向src里的模块。这种方式要求你必须以包的形式运行测试(不能直接双击或用python test_user_input.py运行),修改导入语句为:
import unittest from ..src import user_input
运行时要在项目根目录执行:python -m unittest tests.test_user_input
2. 确保测试用例被执行
你当前的测试代码只定义了测试类,但没有触发unittest的测试执行逻辑。这就导致哪怕导入成功了,直接运行测试文件时Python只会加载模块,不会主动执行测试用例。
修复方法:添加测试执行入口
在test_user_input.py的末尾加上这段代码:
if __name__ == '__main__': unittest.main()
这样不管是直接运行测试文件,还是用命令行工具调用,都会自动执行所有测试用例。
3. 更规范的测试运行方式
推荐在项目根目录(Project/)下用unittest的命令行工具批量运行测试,这样不需要修改路径,还能自动发现所有测试文件:
python -m unittest discover tests
为什么移到src目录就正常?
当测试文件和user_input.py在同一个目录时,Python可以直接找到目标模块;同时如果你是用IDE运行测试,它可能自动帮你补全了测试执行入口,或者默认用了正确的命令行运行方式,所以测试用例能正常执行。
内容的提问来源于stack exchange,提问作者65FordLs2

