【问题标题】:Python's mock throwing AttributeError: 'module' object has no attribute 'patch'Python的模拟抛出AttributeError:'module'对象没有属性'patch'
【发布时间】:2016-12-24 10:20:32
【问题描述】:

我正在尝试为 Python 程序创建一些测试。我使用的是 Python 版本 2.7.12,所以我必须使用 sudo pip install mock 安装 mock

根据documentationseveralothersites应该可以使用下面的代码来使用patch:

import mock     # Also could use from mock import patch
import unittest

class TestCases(unittest.TestCase):
    @mock.patch('MyClass.ImportedClass')   # If using from mock import patch should just be @patch
    def test_patches(self, mock_ImportedClass):
        # Test code...

但是,上面的代码会抛出以下错误:

AttributeError: 'module' object has no attribute 'patch'

在终端中进行了一些实验后,似乎有很多东西不起作用。例如

>>> import mock

>>> mock.MagicMock
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'MagicMock'

>>> mock.patch
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'patch'

>>> mock.Mock
<class mock.Mock at 0x7fdff56b0600>

有趣的是,我可以使用 mock.Mock() 访问名为 patch 的东西,但我不知道这是否以相同的方式工作,并且在文档中找不到任何相关信息。

我在 Python 方面的经验相当有限,所以我不确定可能出了什么问题。我相当确定安装了正确的软件包。对我如何使其正常工作有任何帮助吗?

【问题讨论】:

  • 您是否将文件命名为mock.py 或其他名称?检查mock.__file__,看看它告诉你什么。
  • @user2357112 你非常接近。在 python 的搜索路径中的一个目录中还有另一个名为 mock.py 的文件。不知道它来自哪里,但是在我删除它之后,现在一切似乎都可以编译了。谢谢
  • 我移动了一个mock 子目录,一旦我删除了mock 目录,所有测试都失败并出现同样的错误。一切正常。
  • @user2357112 如果你想写一个答案,我可以把它标记为正确,这样你就可以获得当之无愧的分数。

标签: python python-2.7 unit-testing


【解决方案1】:

为了完整起见,我想添加答案,但归功于@user2357112。

如果您遇到此问题,请检查以确保在同一目录或 python 的搜索路径中没有另一个名为 mock.py 的文件(或您尝试导入的任何文件)。要确认您已加载正确的文件,您可以检查mock.__file_,这是 python 自动添加到您导入文件的属性。如果您使用的是终端,则可以执行以下操作:

>>> import mock

>>> mock.__file__
'/usr/lib/python2.7/...'

如果文件路径不符合您的预期,您应该从搜索路径中删除正在导入的文件或修改您的搜索路径,以便首先找到您想要的文件。如果这两个都不是一个选项,则需要更改要导入的文件的名称(如果它是您定义的文件,而不是像 mock 这样的库)。

【讨论】:

    猜你喜欢
    • 2015-05-19
    • 1970-01-01
    • 2021-01-15
    • 2015-05-16
    • 1970-01-01
    • 2022-12-20
    • 2014-04-03
    • 2016-01-18
    • 2018-01-14
    相关资源
    最近更新 更多