无法使用pytest在测试中导入mock

时间:2016-11-09 16:23:08

标签: python python-2.7 pytest python-mock

我有一个测试文件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

1 个答案:

答案 0 :(得分:0)

原来我使用的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