如何从父目录运行unittest测试套件?附目录结构及代码示例
如何从父目录运行Python unittest测试套件
我来帮你解决这个问题,首先得先处理几个小细节,然后给你几种可行的运行方案:
首先,先修正test_foo.py里的一个错误:最后一行的unittest.main(self)是无效的,self在这个上下文里没有定义,应该改成unittest.main(),不然直接运行这个文件会触发NameError。
接下来,因为你的测试代码用了相对导入from ..src.foo import *,Python默认不会把父目录加入模块搜索路径,所以我们需要先解决这个导入问题,下面是几种实用的方案:
方案一:通过PYTHONPATH环境变量运行(推荐)
在包含src、test和README.md的父目录下,执行对应系统的命令:
Linux/macOS
export PYTHONPATH=$(pwd) && python -m unittest discover test
Windows(PowerShell)
$env:PYTHONPATH = (Get-Location).Path; python -m unittest discover test
解释:
PYTHONPATH=$(pwd)把当前父目录加入Python的模块搜索路径,让Python能识别src和test这两个包python -m unittest discover test会自动扫描test目录下所有以test_开头的测试文件,批量运行其中的测试用例
方案二:修改runner.py加载测试
你可以修改runner.py,手动将父目录加入模块搜索路径,然后加载并运行测试用例,修正后的runner.py代码如下:
import unittest import sys from pathlib import Path # 将父目录添加到Python模块搜索路径 sys.path.append(str(Path(__file__).parent.parent)) # 导入测试用例类 from test.test_foo import TestFoo if __name__ == '__main__': # 创建测试套件 test_suite = unittest.TestLoader().loadTestsFromTestCase(TestFoo) # 运行测试并显示详细结果 runner = unittest.TextTestRunner(verbosity=2) runner.run(test_suite)
然后在父目录下执行:
python test/runner.py
方案三:直接运行单个测试文件
如果你只想单独运行test_foo.py,同样需要先设置PYTHONPATH,然后以模块方式运行:
Linux/macOS
export PYTHONPATH=$(pwd) && python -m test.test_foo
Windows(PowerShell)
$env:PYTHONPATH = (Get-Location).Path; python -m test.test_foo
内容的提问来源于stack exchange,提问作者Pat Mustard
相关产品推荐
相关产品推荐

