一、问题
在使用pytest
进行单元测试时,往往要先将要测试的模块import过来,再编写具体的测试文件。测试文件写好后,加入直接执行 pytest test_xx.py
,就会收到报错:
ModuleNotFoundError: No module named 'xxx'
二、解决方法
在项目顶层目录下,同时保证测试文件中的import都是项目顶层目录开始的绝对导入,使用python -m pytest your_prj_path/test_xx.py
来启动pytest
。
三、原因
python -m module
表示将module
当作脚本来运行,即将module
作为启动文件。跟直接使用pytest
启动测试脚本的区别在于:前者的搜索目录(即sys.path
)为当前项目目录,而后者的搜索目录是pytest
文件所在的目录。