问题描述
我有一个flask项目,当我运行unittest
时可以正常工作,但是当我运行ModuleNotFoundError: No module named 'flask'
时失败了coverage
。
下面的相关代码和shell会话:
$ python -m unittest
..
----------------------------------------------------------------------
Ran 2 tests in 0.041s
OK
$ coverage run -m unittest
E
======================================================================
ERROR: test.test (unittest.loader._FailedTest)
----------------------------------------------------------------------
ImportError: Failed to import test module: test.test
Traceback (most recent call last):
File "<...>/.pyenv/versions/3.8.5/lib/python3.8/unittest/loader.py",line 436,in _find_test_path
module = self._get_module_from_name(name)
File "<...>/.pyenv/versions/3.8.5/lib/python3.8/unittest/loader.py",line 377,in _get_module_from_name
__import__(name)
File "<path to project>/test/test.py",line 3,in <module>
from main import app
File "<...>/main.py",line 1,in <module>
from flask import Flask,jsonify,request
ModuleNotFoundError: No module named 'flask'
# main.py
from flask import Flask,request
app = Flask(__name__)
...
# requirements.txt
...
Flask==1.1.2
...
# test.py
import unittest
from main import app
...
解决方法
我的朋友帮助我调试了这一点-事实证明,即使我在coverage
中安装了venv
,它也是从全局环境中提取coverage
。
使用python -m coverage run -m unittest
代替正确的覆盖范围,然后运行完美。