无法使用pytest在测试中导入模拟
Unable to import mock in test using pytest
我有一个测试文件tests.py
。目前,为了帮助隔离问题,该文件仅包含以下行:
from mock import Mock
当我尝试 运行 这个文件 pytest
:
$ py.test tests.py
我得到以下错误输出:
tests.py:1: in <module>
from mock import Mock
E ImportError: No module named mock
=========================== 1 error in 0.00 seconds ============================
如果我 运行 文件 python
:
$ python tests.py
我没有收到这个错误。同样,如果我打开一个交互式解释器,我可以毫无问题地导入 mock
。 为什么我无法在此上下文中访问 mock
?
原来我使用的 Pytest 版本是通过 apt
安装的,而我的 mock
版本是通过 pip
在虚拟环境中安装的。根据 @MichaelKarotsieris 的建议,我在使用 Pytest 运行 测试后检查了 sys.path
的内容(我使用 --pdb
选项弹出出现错误后的 pdb
调试器):
$ py.test tests.py --pdb
...
(Pdb) import sys
(Pdb) sys.path
据此我发现虽然我的虚拟环境处于活动状态,但该环境在 sys.path
中 不是 。
接下来,我尝试通过pip在我的虚拟环境中安装pytest:
(my_env) $ pip install pytest
但是,仅通过此步骤,通过 apt
安装的 Pytest 版本仍在使用,因此我决定将其删除:
(my_env) $ sudo apt remove --purge python-pytest
在此之后,运行 py.test
命令按预期工作。
事后看来,我想我可以保留通过 apt
安装的 Pytest 版本,而只是 运行 直接来自 virtualenv 的可执行文件:
(my_env) $ /path/to/my_env/bin/py.test tests.py
我有一个测试文件tests.py
。目前,为了帮助隔离问题,该文件仅包含以下行:
from mock import Mock
当我尝试 运行 这个文件 pytest
:
$ py.test tests.py
我得到以下错误输出:
tests.py:1: in <module>
from mock import Mock
E ImportError: No module named mock
=========================== 1 error in 0.00 seconds ============================
如果我 运行 文件 python
:
$ python tests.py
我没有收到这个错误。同样,如果我打开一个交互式解释器,我可以毫无问题地导入 mock
。 为什么我无法在此上下文中访问 mock
?
原来我使用的 Pytest 版本是通过 apt
安装的,而我的 mock
版本是通过 pip
在虚拟环境中安装的。根据 @MichaelKarotsieris 的建议,我在使用 Pytest 运行 测试后检查了 sys.path
的内容(我使用 --pdb
选项弹出出现错误后的 pdb
调试器):
$ py.test tests.py --pdb
...
(Pdb) import sys
(Pdb) sys.path
据此我发现虽然我的虚拟环境处于活动状态,但该环境在 sys.path
中 不是 。
接下来,我尝试通过pip在我的虚拟环境中安装pytest:
(my_env) $ pip install pytest
但是,仅通过此步骤,通过 apt
安装的 Pytest 版本仍在使用,因此我决定将其删除:
(my_env) $ sudo apt remove --purge python-pytest
在此之后,运行 py.test
命令按预期工作。
事后看来,我想我可以保留通过 apt
安装的 Pytest 版本,而只是 运行 直接来自 virtualenv 的可执行文件:
(my_env) $ /path/to/my_env/bin/py.test tests.py