You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python unittest无法发现测试用例:多目录项目测试执行失败求助

解决unittest发现0个测试用例的问题

你执行python3 -m unittest discover后显示Ran 0 tests in 0.000s,是因为默认扫描规则没找到你的测试文件,或者测试模块无法被正确导入,下面是具体解决方法:

项目结构回顾

.
├── src
│   └── arithmetics.py
└── test
    └── lcm
        ├── __init__.py
        ├── test_lcm_exception.py
        └── test_lcm.py

核心原因

unittest discover默认从当前目录递归查找以test_开头的.py文件,但它不会自动识别test目录下的子目录lcm;同时测试文件里导入src.arithmetics需要项目根目录在Python路径中,否则会出现模块找不到的错误。

解决方案

1. 正确指定扫描目录

在项目根目录下执行以下命令,明确告诉discover从test目录开始扫描测试文件:

python3 -m unittest discover -s test -p "test_*.py"

参数说明:

  • -s test:指定扫描的根目录为test
  • -p "test_*.py":指定匹配测试文件的模式(默认规则就是这个,加上后更明确)

2. 解决模块导入问题

如果执行上述命令后出现ModuleNotFoundError: No module named 'src',需要把项目根目录加入Python路径:

  • 临时设置环境变量(终端中执行):
export PYTHONPATH=$(pwd)

之后再重新执行测试命令。

  • 或者在测试文件开头添加代码,动态添加路径:
import sys
from pathlib import Path
# 把项目根目录加入Python路径
sys.path.append(str(Path(__file__).parent.parent.parent))

3. 直接运行单个测试文件(快速验证)

如果想快速验证某个测试文件,可直接指定模块路径:

# 运行test_lcm.py的测试
python3 -m unittest test.lcm.test_lcm
# 运行test_lcm_exception.py的测试
python3 -m unittest test.lcm.test_lcm_exception

额外测试代码问题提醒

你的测试用例里还有几个逻辑错误,会导致测试失败:

  • 测试lcm(0,0)和lcm(X,0)时,这些调用会触发ZeroDivisionError,不能直接用self.assertTrue(0 == lcm(0,0)),应该用异常断言:
self.assertRaises(ZeroDivisionError, lcm, 0, 0)
  • lcm_faulty函数逻辑存在问题,比如lcm_faulty(1,1)会返回0而非1,对应的测试断言self.assertTrue(X == lcm_faulty(X,X))会失败,需要修正函数或测试逻辑。

内容的提问来源于stack exchange,提问作者user20666094

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 16:55:27